问题描述
zbt最近喜欢上了《绝地求生》(pubg)游戏,pubg这个游戏有一种跑毒机制,每次会产生一个圆形的安全区,玩家需要从他的当前位置在一定时间内进入安全区,否则游戏就会失败。
zbt经常死于跑毒,于是他想设计一个程序来判断他是不是能够跑进安全区,如果不能他就直接退出游戏了,如果zbt的血量刚好到达安全区,依旧存活。
zbt现在有100点血和一辆载具,这辆载具有a点油量,每秒需要消耗b点油量前进c米,当载具没有油的时候他只能选择跑步前进,他跑步的话每秒可以跑d米,在毒里面他每秒会受到e点伤害(生命值每时每刻都在减少)。(题目保证载具的速度一定大于等于人跑步的速度)
输入描述
输入包括两行。第一行有5个数,zbt现在的位置x,y;安全区的圆心位置 x1,y1; 安全区的半径r。第二行包括5个数,载具的油量a,每秒消耗的油量为b,载具速度为c,跑步的速度为d,在毒里每秒受到的伤害为e。
输出描述
输出包括一行如果zbt成功进入安全区,输出到达的时间,保留3位小数,否则输出"GG"(没有双引号)。
数据范围:0<=a,b<=1000 , 0<=d<=c<=1000 , -1000<=x,x1,y,y1<=1000 , 0< r <=2000.
样例输入
1 1 10 10 1
1 1 1 1 90
样例输出
GG
#include<stdio.h>
#include<math.h>
int main()
{
double a, b, c, d, e,tmax;
double x, y, x1, y1, r,t;
double s1, d1;
scanf("%lf%lf%lf%lf%lf",&x,&y,&x1,&y1,&r);
scanf("%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e);
d1 = sqrt((x - x1)*(x - x1) + (y - y1)*(y - y1));
d1 = d1 - r;
s1 = a / b*c;
tmax = 100 / e;
if (d1 <= 0)
printf("0.000");
else
{
if (s1 >= d1)
t = d1 / c;
else
{
d1 = d1 - s1;
t = a / b + d1 / d;
}
if (t > tmax)
printf("GG");
else
printf("%.3lf",t);
}
return 0;
}