题目链接:http://hihocoder.com/problemset/problem/1831
题意是有n个城市编号为1-n,然后输入c表示刚开始所拥有的钱,然后输入n个数表示到达第i个城市所得到的钱,再输入n个数表示到达第i个城市所花费的钱,现在要按顺序(按1-n的顺序成环)去周游这n个城市,求出从哪个城市开始,可以在周游的过程中钱数始终是大于等于0的。
思路就是贪心,一个一个去遍历就好了,注意贪心的姿势,不对就会wa...
AC代码:
#include
#define maxn 1000005
using namespace std;
int T,n,c;
int pre[maxn << 1],a[maxn];
int main()
{
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&c);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=1;i<=n;i++){
int x;
scanf("%d",&x);
pre[i] = a[i] - x;
pre[i + n] = pre[i];
}
int i = 1, j = 1;
int ans = c;
while(i <= n){
while(ans + pre[j] >= 0 && j < i + n - 1){
ans += pre[j];
j ++;
}
while(i < j && ans + pre[j] < 0 && i <= n){
ans -= pre[i];
i ++;
}
if(ans + pre[j] < 0){
i ++;
j = i;
ans = c;
}
if(j - i + 1 == n){
break;
}
}
if(j - i + 1 == n){
printf("%d\n",i);
}
else{
puts("-1");
}
}
return 0;
}