delete pics to save space
This commit is contained in:
45
2.11093.cpp
Normal file
45
2.11093.cpp
Normal file
@ -0,0 +1,45 @@
|
||||
// UVa11093 Just Finish it up
|
||||
// Rujia Liu
|
||||
#include<cstdio>
|
||||
|
||||
const int maxn = 100000 + 5;
|
||||
int n, p[maxn], q[maxn];
|
||||
|
||||
// returns s if success
|
||||
// otherwise, return the station you failed to reach
|
||||
// if you failed to reach the start, return -1
|
||||
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; // this means sum(p) < sum(q), so this case is impossible
|
||||
return s; // success
|
||||
}
|
||||
|
||||
int solve() {
|
||||
int start = 0;
|
||||
for(;;) {
|
||||
int finish = go(start);
|
||||
if(finish < start) return -1; // wrapped around, or go(start) returns -1
|
||||
if(finish == start) return start;
|
||||
start = finish;
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
|
||||
int T;
|
||||
scanf("%d", &T);
|
||||
for(int kase = 1; kase <= T; kase++) {
|
||||
scanf("%d", &n);
|
||||
for(int i = 0; i < n; i++) scanf("%d", &p[i]);
|
||||
for(int i = 0; i < n; i++) scanf("%d", &q[i]);
|
||||
int ans = solve();
|
||||
printf("Case %d: ", kase);
|
||||
if(ans < 0) printf("Not possible\n");
|
||||
else printf("Possible from station %d\n", ans+1);
|
||||
}
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user