ACM 模拟 Just Finish it up

来源:互联网 发布:快达票 淘宝 编辑:程序博客网 时间:2024/06/06 06:36

滴,集训第八天打卡。

今天还是第八章训练,看着书上的分析做了一下午,感觉人生得到了升华...


UVA  11093 Just Finish it up 



题目大意:环形跑道上有N个加油站,编号为1~N.第i个加油站可以加pi升油,从加油站i开到下一站需要qi升油。你可以选择一个加油站作为起点,初始油箱为空,但可以立即加油。任务是选择一个起点,使得可以走完一圈。


思路:枚举模拟,考虑一号加油站,直接模拟判断它是否为解。如果是,直接输出,如果不是,说明在模拟过程中遇到了某个加油站p,在从它开到加油站p+1时油没了。于是下一次模拟直接从p+1开始即可。

#include <stdio.h>int main(){int t,n,i,j,a[100005],b[100005],o=1,s,p,k,kk;scanf("%d",&t);while(t--){scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n;i++)scanf("%d",&b[i]);printf("Case %d: ",o++);s=0;p=0;k=0;kk=0;while(p<n){k=0;s=0;for(i=p;i<n+p;i++){j=i;if(j>=n)//环形跑道,要绕一圈j-=n;s+=a[j];s-=b[j];if(s<0){p=j+1;//起点变更k=1;break;}}if(i!=j&&k==1)break;if(k==0){kk=1;printf("Possible from station %d\n",p+1);break;}}if(kk==0)printf("Not possible\n");}}


原创粉丝点击