Advertisement

ACM 2018 北京网络赛 D题:80 Days (模拟)

阅读量:

http://hihocoder.com/contest/acmicpc2018beijingonline 2018北京网络赛题目

题解

该模拟存在一个需要注意的地方:问题指出绕一圈后会回到起始点,并在此情况下无需再次执行金额(即a)的非负数(>=0)判断。起初我认为在返回起点时也应满足此条件以避免错误结果出现(导致困惑),后来认识到只要在1-n范围内的每个点执行一次这样的判断就足够了。

复制代码
    #include<iostream>
    #include<cstdio>
    #define ll long long
    using namespace std;
    
    const int maxn=1000000+10;
    int T,n;
    ll c,a[maxn],b[maxn],t;
    
    int main(){
    	scanf("%d",&T);
    	while(T--){
    		scanf("%d %lld",&n,&c);
    		for(int i=1;i<=n;i++){
    			scanf("%lld",&a[i]);
    		}
    		for(int i=1;i<=n;i++){
    			scanf("%lld",&b[i]);
    		}
    		
    		for(int i=1;i<=n;i++){
    			ll money=c;
    			money+=a[i]-b[i];
    			if(money<0) continue;
    			int cnt=1,f=0;
    			int index=i+1;
    			
    			while(money>=0){
    				if(index>n) index=1;
    				money+=a[index]-b[index];
    
    				cnt++;
    				index++;
    				if(cnt==n) break;
    			}
    			if(cnt==n&&money>=0){
    				printf("%d\n",i);break;
    			}
    			if(i==n) printf("-1\n");
    		}
    	}
    	return 0;
    }

全部评论 (0)

还没有任何评论哟~