题意:有n个加油站,每个加油站可加油pi,从一个加油站到另一个加油站需要qi油,问是否可以跑完所有加油站。
分析:枚举加油站起点。
#include<iostream>
#include<string>
#include<sstream>
#include<set>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
const int maxn = 100000+5;
int n;
int p[maxn], q[maxn];
int go(int s) {
int fuel = p[s] - q[s];
for (int i = (s + 1) % n; i != s; i = (i + 1) % n) {
if (fuel < 0)return i;
fuel += (p[i] - q[i]);
}
if (fuel < 0)return -1;
return s;
}
int solve() {
int f;
int s=0;
for (;;) {
f = go(s);
if (f == s)return f;
if (f < s)return -1;
s = f;
}
}
int main() {
int kase;
cin >> kase;
for (int k = 0; k < kase; k++) {
cin >> n;
for (int i = 0; i < n; i++)cin >> p[i];
for (int i = 0; i < n; i++)cin >> q[i];
int ans = solve();
cout << "Case " << k + 1 << ": ";
ans < 0 ? cout << "Not possible" : cout << "Possible from station " << ans+1;
cout << endl;
}
return 0;
}