Just Finish it up

                                         Just Finish it up

                                                             Time limit3000 ms

                    OSLinux

题意:   加油站问题,第一排给的是每个加油站可以加的油,第二排是2个加油站中间要消耗的油,开一圈。求离起点最近的可行解。

思路: 把每次到下个加油站后油量变化存一个数组,从第一个加油站开始,如果发现油量为负的了,就换第二个加油站开始,这样找到第一个可行的就输出。

代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     int n;
 5     int j,i;
 6     cin>>n;
 7     int x=1;
 8     while(n--){
 9         int t;
10         cin>>t;
11         int add[t],del[t],c[t];
12         for(i=0;i<t;i++){
13             cin>>add[i];
14         }
15         for(i=0;i<t;i++){
16             cin>>del[i];
17         }
18         for(i=0;i<t;i++){
19             c[i]=add[i]-del[i];
20         }
21         printf("Case %d: ",x++);
22         int num=0;
23         int now=0;
24         int k=0;
25         int k1=0;
26         while(now<t){
27             
28             int count=0;
29             int num=0;
30             for(i=now;i<t+now;i++){
31                 j=i;
32                 if(j>=t) j-=t;
33                 num+=c[j];
34                 if(num<0){
35                     now=j+1;
36                     count=1;
37                     break;
38                 }
39             }
40             if(i!=j&&count==1) break;
41             if(count==0){
42                 k1=1;
43                 cout<<"Possible from station "<<now+1<<endl;
44                 break;
45             }
46             
47         }
48         if(k1==0)
49             cout<<"Not possible"<<endl;
50     }
51     
52     return 0;
53 }

猜你喜欢

转载自www.cnblogs.com/yiyunwang/p/9387878.html