2014华为机试题15:洞穴逃生
来源:互联网 发布:无烟艾灸仪 知乎 编辑:程序博客网 时间:2024/04/27 18:30
/*王子的状态有以下几种情形:
1、在魔法值充分的情形下,优先连续闪烁,每秒移动距离是 60/1=60 米;
在魔法值m不够充分的情形下,应该尽可能考虑原地休息恢复然后闪烁,按m值分三种情形,优先考虑第2情形,
2、m>=6,休息1秒后闪烁,每秒移动距离是 60/2=30 米;
3、2<=m<6,休息2秒后闪烁,每秒移动距离是 60/3=20 米;
4、m<2,休息3秒后闪烁,这样每秒移动距离是 60/4=15 米,比直接跑移动的还少,好像没什么价值。不过闪烁后能至少剩下m>=2,能转换到2情形,这样两次合起来是休息5秒闪烁2次,平均每秒移动距离是 120/7=17.14,额,比单纯跑步快一丁点,^_^
这种情形比较特殊,只有在剩下距离不少于120米的情况下适应,否则需要拆开来考虑;
5、最后一种情形是选择直接跑,只应在最后一步才选择。条件是如果剩余时间无法满足以上2和3两种休息后闪烁的情形,或者距离出口距离小于60米时需要在直接跑与休息后闪烁之间比较。
注意以上第4种情形非常特别,强调条件,距离必须不少于120米,否则不能成立,这应当是考虑时最容易混淆出错的地方吧
*/
#include "stdio.h"
int main()
{
int M, S, T;
int moved = 0, time = 0;
scanf("%d%d%d",&M,&S,&T);
while(moved<S && T-time>0)
{
if(M>=10) // 情形 1 魔法值大于等于10,优先闪烁
{
moved += 60;
time++;
M -= 10;
}
else if(M>=6 && T-time>=2 && S-moved>34) // 情形 2
{
moved += 60;
time += 2;
M -= 6;
}
else if(M>=2 && T-time>=3 && S-moved>51) // 情形 3
{
moved += 60;
time += 3;
M -= 2;
}
else if(T-time>=7 && S-moved>=120) // 情形 4
{
moved += 120;
time += 7;
}
else // 情形 5
{
int n1 = T-time;
int n2 = (S-moved+16)/17;//考虑最后不足17m的情况 所以要加上16 不然的话就不能得到1
int n = n1<n2 ? n1 : n2;
moved += n * 17;
time += n;
}
}
if(moved >= S)
printf("Yes %d\n",time);
else
printf("No %d\n",moved);
return 0;
}
- 2014华为机试题15:洞穴逃生
- 华为机试题:洞穴逃生
- 华为机试题:洞穴逃生
- 2015华为机试题:洞穴逃生
- 华为2014机试试题 - 洞穴逃生
- 华为面试题之洞穴逃生
- 华为机试——洞穴逃生
- 华为上机【洞穴逃生】
- 华为OJ----洞穴逃生
- 华为编程大赛--洞穴逃生
- 【华为编程大赛】洞穴逃生
- 2014华为编程大赛 洞穴逃生 C语言实现
- 华为-洞穴逃生(OJ通过)
- 2016华为校招上机试题2——洞穴逃生
- 洞穴逃生
- 洞穴逃生
- 洞穴逃生
- 洞穴逃生
- ASIHTTPRequest足够了吗?
- Android之ListView原理学习与优化总结
- 油猴子扩展脚本
- 【Android Lock Pattern】图案解锁(一):LockPatternView源代码
- 查找算法
- 2014华为机试题15:洞穴逃生
- 智能家居通用管理平台(八) – 服务程序的设计
- Android开发环境搭建
- hdu 4944
- 转 lua 中pairs 和 ipairs区别
- Python中的Random函数
- 【数据结构与算法】顺序查找
- 4Sum
- 迷迭香意式香料面包