ACM 模拟 Just Finish it up

滴,集训第八天打卡。

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


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");
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值