【ACM】绝地求生

题目链接: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;
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
绝地求生:易语言 全套加速器源码【更新日期:2018年1月10日】 使用说明: 用FTP将后台文件用二进制上传到网站根目录后安装网站 安装好后登陆后台添加产品 然后把激活码输入都源码里,产品ID,通信秘钥在后台添加产品后获取,并输入 然后搜索HTTP 把所有HTTP网址改成自己的域名即可 后台设置公告(重要)不设置会导致软件无法启动 格式为 公告内容||网址 添加游戏: 在M文件夹中 route就是存放游戏路由表的地方 打开 1||英雄联盟||http://域名/m/route/yxlm.txt||http://域名/m/route/1.png||0 序号||游戏名称||游戏路由表地址||游戏LOGO地址||后面的0代表国内游戏,1则为国外游戏 路由表格式参考:add 1.207.140.0 mask 255.255.255.0 IP METRIC default IF IFZ add 14.17.12.0 mask 255.255.255.0 IP METRIC default IF IFZ add 14.17.13.0 mask 255.255.255.0 IP METRIC default IF IFZ add 14.17.14.0 mask 255.255.255.0 IP METRIC default IF IFZ 线路添加:网游加速的线路分别存放在这两个文件里面 国内跟国外,格式为 线路名称||IP||用户名||密码 网络加速则存放在 编写好节点文档后,采用附赠的加密工具加密后上传到网站根目录即可 充值系统 注:后台必须把充值卡位数改成10位以内,太多字符会导致充值出错! 1.首先打开注册个账号http://www.1ka123.com/dashboard/index 2.打开雷盾的后台 获取客户ID 3.地址 高级=》在线售卡 4. 这里写上客户ID 然后点编辑 刷新 5.获取提卡数据 6.在易卡上面 找到商品/分类的商品列表 点编辑 7.平台对接写雷盾 对接密匙 写提卡数据 然后点保存这样子就可以实现无卡的时候自动补卡了 软件对接: 打开源码目录下的扫码支付模块 按下列格式写入你的卡类信息 比如我这里增加月卡 修改完即可收款实现自动充值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值