Codeforces Round #477

题目链接:Codeforces Round #477


心态有点崩,读题太难受了。

A:枚举每个时间之间的查找,看能否起飞即可,注意起飞和降落需要额外两分钟。

AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=110;
int n,s,sum[N];
struct node{int h,m;}t[N];
signed main(){
	cin>>n>>s;
	for(int i=1;i<=n;i++)	cin>>t[i].h>>t[i].m,sum[i]=t[i].h*60+t[i].m;
	if(sum[1]>s)	return puts("0 0"),0;
	for(int i=1;i<n;i++){
		if(sum[i+1]-sum[i]>=s*2+2){
			sum[i]+=s+1;	cout<<sum[i]/60<<' '<<sum[i]%60<<'\n';return 0; 
		}
	}
	sum[n]+=s+1;	cout<<sum[n]/60<<' '<<sum[n]%60<<'\n';
	return 0;
}

B:从大到小贪心即可。

AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=1e5+10;
int n,A,B,a[N],res;
double s,sum;
signed main(){
	cin>>n>>A>>B;
	for(int i=1;i<=n;i++)	cin>>a[i],sum+=a[i];	sum-=a[1];
	s=A*a[1]*1.0/B-a[1];	sort(a+2,a+1+n);
	for(int i=n;i>=2;i--){
		if(sum<=s)	break;	sum-=a[i];	res++;
	}
	cout<<res<<endl;
	return 0;
}

C:先特判同一层的情况,然后要么往右,要么往左走,要么电梯要么楼梯,四种情况取最小值即可。

AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=1e5+10;
int q,n,m,cl,ce,v,a[N],b[N],res;
signed main(){
	ios::sync_with_stdio(false);
	cin>>n>>m>>cl>>ce>>v;
	for(int i=1;i<=cl;i++)	cin>>a[i];
	for(int i=1;i<=ce;i++)	cin>>b[i];
	cin>>q;
	while(q--){
		int x1,y1,x2,y2;	cin>>y1>>x1>>y2>>x2;
		if(y1==y2){cout<<abs(x1-x2)<<'\n'; continue;}
		int pos=lower_bound(a+1,a+1+cl,x1)-a; res=1e9;
		if(pos!=cl+1) res=abs(x1-a[pos])+abs(x2-a[pos])+abs(y1-y2);
		if(pos>1&&cl)	
			pos--,res=min(res,abs(x1-a[pos])+abs(x2-a[pos])+abs(y1-y2));
		pos=lower_bound(b+1,b+1+ce,x1)-b;
		if(pos!=ce+1) 
			res=min(res,abs(x1-b[pos])+abs(x2-b[pos])+(abs(y1-y2)+v-1)/v);
		if(pos>1&&ce)	
			pos--,res=min(res,abs(x1-b[pos])+abs(x2-b[pos])+(abs(y1-y2)+v-1)/v);
		cout<<res<<endl;
	}
	return 0;
}
发布了416 篇原创文章 · 获赞 228 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43826249/article/details/103861292