您的位置:首页 > 其它

守望者的逃离

2014-03-01 12:57 211 查看
/*恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。守望者
在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始
对这个荒岛施咒,这座岛很快就会沉下去。到那时,岛上的所有人都会遇难。守望者的跑步
速度为17m/s,以这样的速度是无法逃离荒岛的。庆幸的是守望者拥有闪烁法术,可在1s内
移动60m,不过每次使用闪烁法术都会消耗魔法值10点。守望者的魔法值恢复的速度为4点/s
,只有处在原地休息状态时才能恢复。
现在已知守望者的魔法初值M,他所在的初始位置与岛的出口之间的距离S,岛沉没的时间T。
你的任务写写一个程序帮助守望者计算如何在最短的时间内逃离荒岛,若不能逃出,则输出
守望者在剩下的时间能走的最远距离。注意:守望者跑步、闪烁或休息活动均以秒(s)为单
位,且每次活动的持续时间为整数秒。距离的单位为米(m)。
Input  Format
在输入文件escape.in仅一行,包括空格隔开的三个非负整数M,S,T。
Output Format
在输出文件escape.out包括两行:
第1行为字符串“Yes”或“No”(区分大小写),即守望者是否能逃离荒岛。
第2行包含一个整数。第一行为“Yes”(区分大小写)时表示守望者逃离荒岛的最短时间;
第一行为“No”(区分大小写)时表示守望者能走的最远距离。
Sample Input
【输入样例1】
39 200 4
【输入样例2】
36 255 10
Sample Output
【输出样例1】
No
197
【输出样例2】
Yes
6
*/
import java.util.*;

public class Main7 {
// 算了几页纸,调试了4个小时,才通过。累觉不爱
public static long M, S, T;
// t1代表剩下的时间,t代表所用的时间
public static long t, t1;
// s代表走的路程
public static long s;

public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
M = sc.nextLong();
S = sc.nextLong();
T = sc.nextLong();
t = 0;
s = 0;
t1 = T;
while (true) {
// 判断使用闪烁的情况
if ((M >= 2 && t1 >= 3 && S - s > 45)
|| (M >= 6 && t1 >= 2 && S - s > 34 && M < 10)
|| (t1 >= 7 && S - s >= 120) || M >= 10) {
// 使用闪烁方法
if (M >= 10) {
M -= 10;
s += 60;
t++;
} else {
// 假如法力值小于10,则停下来补充法力值
while (true) {
M += 4;
t++;
// 停下来加法力值是时间减少
--t1;
if (M >= 10) {
M -= 10;
s += 60;
// 闪烁需要用1秒
t++;
break;
}

}
}
} else {
// 使用跑步方法
s += 17;
t++;
}
// 无论是跑步还是闪烁,都需要扣除1秒的时间,这里其实可以放到那一秒是跑步还是闪烁里面去。
--t1;
System.out.println(t1 + " " + M + " " + t + " " + s);
if (t >= T && s < S) {
System.out.println("No");
System.out.println(s);
// System.out.println(t + " " + s);
return;
}
if (s >= S && t <= T) {
System.out.println("Yes\n" + t);
// System.out.println(t + " " + s);
return;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: