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

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

题解

  • 类型:模拟
  • 有个坑点我觉得,就是它题目说绕一圈又回到起点,那回到起点后是不用再加a判断钱>=0的,我一开始做的时候还考虑了回到起点也要>=0,结果出错了,一脸懵,改成只要判断1-n上每个点一次就好了,回到起点不用再单独判断。
#include
#include
#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;
}

你可能感兴趣的:(ACM网络赛真题)