F-大吉大利,今晚吃鸡——跑毒篇
链接:https://www.nowcoder.com/acm/contest/67/F
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
现在有一款很火的游戏playerunknown's battlegrounds,人称“吃鸡”,在里面经常面临跑毒(从安全区外跑进安全区内)的问题,在安全区外,人们会处于中毒状态,每秒会掉a%血,人们可以通过使用道具急救包把血量升回到80%,使用急救包需要原地站着6秒。现在知道在安全区外扣血速度为a%/s,角色和安全区的距离为b米,角色跑步速度为1m/s,角色有c个急救包,请问角色是否能安全跑进安全区内。(PS:角色开始的血量为100%。如果血量降到0%,立刻判定为死亡。使用急救包时,如果刚使用完毕瞬间或者正在使用急救包的时候,血量降到0%,角色立即判定为死亡。顺带一提,这里判断时间不存在0.xxxx秒,最小时间单位为1s)
输入描述:
第一行是样例数T(T<9)
第2到2+T-1行每行有三个整数a b c,其中a为安全区外的扣血速度a%/s,b为角色和安全区的距离,c为急救包的数量。
输出描述:
如果角色能进入安全区输出“YES”。
若角色在安全区外死亡输出“NO”。
输入
3 1 100 2 6 31 2 7 31 2
输出
YES YES NO
说明
当a=6,b=31,c=2时,
0s起跑,10s的时候角色跑了10M,血量剩下40%,开始使用急救包,16s的时候,角色血量先降到4%再恢复到80%,然后角色继续跑步。23s的时候,角色跑了17M,剩余血量为38%,开始使用急救包,
29s的时候,角色血量先降到2%再恢复到80%,然后角色继续跑步。42s的时候,角色跑了30m,血量剩余2%。当43s的时候,角色跑了31m进入了安全区内,不再扣血。
备注:
对于100%的数据,
1 <= T < 9;
0 < a <= 20;
0 < b <= 120;
0 <= c <= 8。
这个题写的我很难过,因为当最后还剩一点血,而且不足掉血的速度的时候,还能再跑一米。。。这里被卡了一手,而且我一开始写的代码要考虑的比较麻烦。后面看了队友的,队友写的就是比我的好,没办法,谁让我是基地最菜(;´д`)ゞ
代码:
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 int main(){ 8 int t,a,b,c; 9 scanf("%d",&t); 10 while(t--){ 11 scanf("%d%d%d",&a,&b,&c); 12 int p=0,bl=100; 13 while(bl){ 14 if(bl%a==0){ 15 if(c==0){ 16 p+=bl/a; 17 bl=0; 18 } 19 else{ 20 if(c!=0){ 21 p+=bl/a-7; 22 bl=80; 23 c--; 24 } 25 } 26 } 27 else{ 28 if(c==0){ 29 p+=bl/a+1; 30 bl=0; 31 } 32 else{ 33 if(c!=0){ 34 p+=bl/a-6; 35 bl=80; 36 c--; 37 } 38 } 39 } 40 } 41 if(p>=b)printf("YES\n"); 42 else printf("NO\n"); 43 } 44 return 0; 45 }