d16_1223
题目
题目描述
有一次,小鱼要从 A 处沿直线往右边游,小鱼第一秒可以游 77 米,从第二秒开始每秒游的距离只有前一秒的 98%98%。有个极其邪恶的猎人在距离 A 处右边 �s 米的地方,安装了一个隐蔽的探测器,探测器左右 �x 米之内是探测范围。一旦小鱼进入探测器的范围,探测器就会在这一秒结束时把信号传递给那个猎人,猎人在一秒后就要对探测器范围内的水域进行抓捕,这时如果小鱼还在这范围内就危险了。也就是说小鱼一旦进入探测器范围,如果能在下 11 秒的时间内马上游出探测器的范围,还是安全的。现在给出 �s 和 �x 的数据,请你判断小鱼会不会有危险?如果有危险输出 y
,没有危险输出 n
。
输入格式
一行内输入两个实数,用空格分隔,表示 �s 和 �x。
输出格式
一行内输出'y'或者'n'表示小鱼是否会有危险。
输入输出样例
输入 #1复制
14 1
输出 #1复制
n
说明/提示
数据规模与约定
对于 100%100% 的数据,保证 1≤�,�≤1001≤s,x≤100,小数点后最多有 66 位小数。
思路
总体思路:
首先,不论如何,一定会进入危险区域,需要判断的是能不能跑出来
是否能走:
判断危险时,进入的距离
判断危险时,剩余的距离
剩余的距离和下一秒的v相比较,v更大就能跑
发现有其他情况:进入危险区域的方式有多种:
危险区域左边界<=鱼>危险区域右边界 ---满足上面情况可以
危险区域右边界<=鱼 ---直接判定可以逃离危险
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//读取输入
Scanner in = new Scanner(System.in);
int s = in.nextInt();
int x = in.nextInt();
double v = 7, l = 0;
double a = 0, b = 0;
while (v != 0) {
l = l + v;
//判断是否进入
if (l >= s - x && l < s + x) {
a = l - (s - x);
b = 2 * x - a;
v = v * 0.98;
if (v > b)
System.out.println("n");
else System.out.println("y");
break;
} else if (l >= s + x) {
System.out.println("y");
break;
} else v = v * 0.98;
}
}
}