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)
还没有任何评论哟~
