首页 > 其他分享 >CF864C Bus 题解

CF864C Bus 题解

时间:2022-12-25 15:02:05浏览次数:70  
标签:加油站 CF864C 题解 sum int Bus 加油

题目传送门

题目大意

一辆汽车从 \(0\) 到 \(a\) 往返 \(k \div 2\) 次(也就是去算一次,回算一次);原来有 \(b\) 升油,每行驶一单位距离消耗一升油,在 \(f\) 有加油站(可以加满油或者不加油);问要加多少次油;若到达不了 \(a\) 处,输出 \(-1\) ;

解题思路

要先判断是否能用 \(b\) 升油走到加油站。

不能就永远到不了,直接结束了。

如果能:

以加油站为分点,将这段路分为两段;

第一段:

去:如果能不加油到终点再走回来,就不加油;否则就加油。

回:同理。

注意每次都要判断到加油站的距离不能小于零。

代码如下:

int first(int a,int b,int f,int k) {
	for(int i=1; i<=k-1; i++) {
		if(i%2==1) {    
			if(sum>=2*(a-f))sum-=2*(a-f);
			else {
				sum=b-2*(a-f);
				ans++;
				if(sum<0) {
					cout<<"-1";
					exit(0);
				}
			}
		} 
		else {
			if(sum>=2*f)sum-=2*f;
			else {
				sum=b-2*f;
				ans++;
				if(sum<0) {
					cout<<"-1";
					exit(0);
				}
			}
		}
	}
}

第二段:

与第一段同理。

注意每次也都要判断到加油站的距离不能小于零。

代码如下:

int second(int a,int b,int f,int k) {
	if(k%2==1) {
		if(sum<(a-f)) {
			sum=b-(a-f);
			ans++;
			if(sum<0) {
				cout<<"-1";
				exit(0);
			}
		}
	} 
	else {
		if(sum<f) {
			sum=b-f;
			ans++;
			if(sum<0) {
				cout<<"-1";
				exit(0);
			}
		}
	}
}

注意一个地方:

在这里
return 0 就是退出这个函数,而不是返回这个程序,用 exit(0) 相当于在 mainreturn 0(感谢 kuailedetongnian 的提醒)。

完整 AC 代码

标签:加油站,CF864C,题解,sum,int,Bus,加油
From: https://www.cnblogs.com/zzyblog0619/p/17004036.html

相关文章

  • UVA13197 Cuberoot This 题解
    题目传送门题目大意求满足\(x^3\bmodp=a\)且\(x<p\)的数\(x\),升序输出。解题思路在\(0\)到\(p-1\)的范围内,查找满足条件的\(x\);值得注意的是,输出要留意:最......
  • AT_joi2022_yo1a_d 箱と鍵 (Boxes and Keys) 题解
    题目传送门题目大意给定一个长度为\(n\)的数组\(a\)和一个长度为\(m\)的数组\(b\),求\(a\)中有多少个数在\(b\)中出现过。解题思路数据比较小,可以直接暴力:......
  • CF1735A Working Week 题解
    题目传送门题目大意一周有\(n\)天,有三天休息日,其中第\(n\)天一定休息。现需要安排剩下的两个休息日,要求:不能使得休息日相邻。这两个休息日将\(n-1\)天分成三......
  • AT_mujin_pc_2018_b セキュリティ 题解
    题目传送门题目大意房间原有\(A\)人,+表示进来一个人,-表示出去一个人;求是否有一个时间,房间内的人数为\(0\)。解题思路按题意进行模拟:首先判断\(A\)是否等于零,......
  • AT_pakencamp_2021_day2_c Participants 3 题解
    题目传送门题目大意找出没有参加第\(1\)天的比赛,但是参加了第\(2\)天的比赛人的ID。解题思路从第一次比赛人员的ID中,查找是不是没有有第二次比赛人员的ID。如......
  • UVA694 The Collatz Sequence 题解
    题目传送门题目大意根据题目中的规定生成序列,问有多少次计算;注意输入以“\(\-1\)\(\-1\)”结尾。解题思路按照题目中所说的进行模拟。在保证\(a\)不大于\(l\)......
  • CF317A Perfect Pair 题解
    题目传送门题目大意给定一对数\(x\)和\(y\),允许把其中的一个数换成\(x+y\),问把\(x\)或\(y\)变成大于或等于\(m\)的数,需要几次操作。解题思路首先可以判断......
  • UVA12459 Bees' ancestors 题解
    题目传送门题目大意雌蜂有一个父亲一个母亲,而雄蜂只有母亲。计算出Willy的祖先中,哪一代有多少祖先。解题思路已知Willy为雄蜂,从Willy开始向前推:有一个母亲(1);......
  • CF334A Candy Bags 题解
    题目传送门题目大意:给你\(n^2\)颗糖,分给\(n\)人,使每个人的权值相等(第\(i\)块的权值为\(i\)),输出第\(i\)个人选的糖果集合,注意题目中说\(n\)为偶数。解题思路......
  • CF465B Inbox (100500) 题解
    题目传送门题目大意有已读或未读的邮件,可以进行以下操作:读完邮件后回到邮件列表;回到列表后选取任意一个未读邮件读;读完一个邮件之后读这个邮件的下一个或者上一个邮......