解题思路:

注意事项:

参考代码:

#include<cstdio>
#define max(a,b) a>b?a:b 
using namespace std;

int main(){
	int M,S,T;
	scanf("%d%d%d",&M,&S,&T);
	int flash=0; //一直用闪,能移动的距离 
	int dist=0; //闪和跑的移动距离,其实是记录每一秒变化下最佳移动距离 
	for(int t=1; t<=T; ++t){ 
		if(M>=10){//魔法值足够
			flash+=60; //1秒60米 
			M-=10; 
		}
		else //魔法值不足,停下来休息 
			M+=4;//1秒恢复4点 
			
		dist=max(dist+17,flash);//记录当前这一秒最大移动距离。		
		if(dist>=S){
			printf("Yes\n%d\n",t);
			return 0;
		}
	}
	printf("No\n%d\n",dist);
	return 0;
}


点赞(2)
 

0.0分

9 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 10 条评论

鸡汤 2年前 回复TA
是错的呀,不正确
叶奇 3年前 回复TA
没有看懂耶
木头 4年前 回复TA
蓝不足10,恢复4,但是你怎么就能跑17米呢?不是说好的休息原地不动才能恢复4魔法吗
靠近一点点 4年前 回复TA
厉害啊,我怎么就没想到,就差比较那一步没想到
cout 5年前 回复TA
@酷酷流浪猫 如果还有足够时间回蓝的话加的60会把回蓝时走的路覆盖掉
追猫的熊 5年前 回复TA
@碧落 好像是能量虽然再往前跑,但此时dist和flash是两种不同策略:一直跑和憋蓝放闪现。而可以证明,长远来看一定是憋蓝放闪现走得快,只在离终点很近时直接跑可能更快。故一直在加蓝。
碧落 5年前 回复TA
题目不是说,只有停下才能恢复能量吗 我看的时候觉得那个选择停下来恢复能量还是往前跑是个选择很麻烦,,但是这个好像是跑的时候就可以恢复能量,只要没有闪就恢复,,是不是有问题,,但是系统判定又是真确的,,是不是我哪里没看懂,,,
yaoking 5年前 回复TA
@酷酷流浪猫 对呀 不是在原地休息吗 他不能够移动啊
酷酷流浪猫 5年前 回复TA
如果flash没有加60 m加了4,dist也加了17,这不矛盾吗?
李匡山 5年前 回复TA
福大的大佬牛批