您的位置:首页 > 其它

ACM 模拟 Just Finish it up

2017-07-25 11:39 183 查看
滴,集训第八天打卡。

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

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");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  模拟 枚举