http://hihocoder.com/contest/acmicpc2018beijingonline 2018北京网络赛题目
题解
- 类型:模拟
- 有个坑点我觉得,就是它题目说绕一圈又回到起点,那回到起点后是不用再加a判断钱>=0的,我一开始做的时候还考虑了回到起点也要>=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;
}