【ACM】绝地求生

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN___CSDN/article/details/84187884

题目链接:http://acm.nuc.edu.cn/OJ/contest/show/43/1009

【问题描述】

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、首先算出人到安全区边界的距离d1(注意注意是边界!!!不是到圆心),如果直接算出人在安全区范围内,则输出“0.000”

2、算出从100点血到0的时间为tmax

3、计算开车的最长时间,距离,如果可以直接开车进入安全区,则用d1/c,(不是a/b!!!!!)

4、如果不能直接开车到安全区,则开车的时间为a/b,车行驶的距离为a/b*c,人跑步的距离为d1=d1-a/b*c,最终跑到安全区的时间为d1/d。

5、花费的总时间为a/b+d1/d,与tmax进行比较即可。

#include <stdio.h>
#include <math.h>
int main ()
{
	double x,y,x1,y1,r,a,b,c,d,e,tmax,d1,t,s1;
	scanf("%lf%lf%lf%lf%lf",&x,&y,&x1,&y1,&r);
	scanf("%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e);
	tmax=100/e;
	d1=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1))-r;
	s1=a/b*c; //车行驶的距离 
	if(d1<=0)	printf("0.000");
	else
	{
		if(s1>=d1)//可以直接开车进入安全区 
		{
			t=d1/c;
		}
		else
		{
			d1-=s1;//人跑步的距离 
			t = a/b + d1/d; 
		}
		if(t>tmax)	printf("GG");
		else	printf("%.3lf",t);
	}
	return 0;
}

另一种代码:

#include<stdio.h>
#include<math.h>
int main()
{
	double a,b,c,d,e;//abcde分别为油量,耗油速,车速,步行速度,掉血速
	double x,y,x1,y1,r,m,t,t1,t2;//xyx1y1为两坐标,r为半径,m为到安全区最短距离,t为总时间,t1为开车时间,t2为步行时间,t为总时间

	scanf("%lf%lf%lf%lf%lf",&x,&y,&x1,&y1,&r);
	m=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1))-r;
	scanf("%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e);
	if(m<=0)
		printf("0.000\n");
	else
	{
		if((a/b)*c>=m)
			t1=m/c;//如果开车能到达安全区,t1时间为m(距离)/车速
		else
			t1=a/b;//如果开车不能到达安全区,t1时间为a(油量)/b(耗油速度)
		t2=(m-t1*c)/d;//如果t1为第一种情况,t2=0,如果t2为第二种情况,t2>0
		t=t1+t2;//总时间
		if(t*e<=100)//t*e为总掉血量
			printf("%.3lf\n",t);
		else
			printf("GG\n");
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/CSDN___CSDN/article/details/84187884