UVa 11093 Just Finish it up

从第一个加油站开始枚举起点,如果到第i个加油站油量不够的话,那么1~i个加油站都不可能是起点。

将第i+1个加油站作为起点继续枚举。

比如说,第一个加油站开始最多跑到第5个加油站,那么第二个加油站不可能是起点。

因为第一个作为起点的话,到达第二个加油站油箱可能还有剩余,这样都跑不完一圈,所以从第二个站开始跑也就不可能跑完一圈。

 1 #include <cstdio>
 2 
 3 const int maxn = 100000 + 10;
 4 int p[maxn * 2], q[maxn * 2];
 5 
 6 int main()
 7 {
 8     freopen("in.txt", "r", stdin);
 9 
10     int T; scanf("%d", &T);
11     for(int kase = 1; kase <= T; kase++)
12     {
13         printf("Case %d: ", kase);
14 
15         int n; scanf("%d", &n);
16         for(int i = 0; i < n; i++) { scanf("%d", &p[i]); p[i+n] = p[i]; }
17         for(int i = 0; i < n; i++) { scanf("%d", &q[i]); q[i+n] = q[i]; }
18 
19         bool flag = false;
20         int cur = 0, pos = -1, cnt = 0;
21         for(int i = 0; i < n;)
22         {
23             int cur = 0;
24             int j = i;
25             while(j < i + n && cur + p[j] >= q[j])
26             {
27                 cur += p[j] - q[j];
28                 j++;
29             }
30             if(j == i + n) { pos = i; break; }
31             i = j + 1;
32         }
33 
34         if(pos >= 0) printf("Possible from station %d\n", pos + 1);
35         else puts("Not possible");
36     }
37 
38     return 0;
39 }
代码君

 

posted @ 2015-04-13 19:18  AOQNRMGYXLMV  阅读(272)  评论(0编辑  收藏  举报