题目大意:环形跑道上有n个加油站,编号1~n,第i个加油站可以加pi加仑油,从i到下一站需要qi加仑油。选择一个为起点,一开始油有0,使得可以绕一圈回到起点,若没有起点可以满足则输出Not possible
解题思路:从第一个加油站开始往后模拟,如果在第i个加油站发现无法到达,则前面i个一定不是解。
#include <cstdio>
#include <iostream>
using namespace std;
int give[100010], need[100010];
int main() {
int n, m;
cin >> n;
m = 0;
while(m != n) {
m++;
int x;
cin >> x;
for(int i = 0; i < x; i++) {
cin >> give[i];
}
for(int i = 0; i < x; i++) {
cin >> need[i];
}
printf("Case %d: ", m);
int now = 0, tip = 0;
int q = 0;
int flag = 0;
while(1) {
q = q + give[now] - need[now];
now++;
if(now >= x)
now = now % x;
if(q < 0) {
q = 0;
flag = 0;
if(now <= tip) {
printf("Not possible\n");
break;
}
tip = now;
}
else {
if(tip == now && flag == 1) {
printf("Possible from station %d\n", tip+1);
break;
}
flag = 1;
}
}
}
return 0;
}