zoukankan      html  css  js  c++  java
  • 牛客网 2018年全国多校算法寒假训练营练习比赛(第一场) F-大吉大利,今晚吃鸡——跑毒篇

     

    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”。
    示例1

    输入

    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
    ");
    42         else printf("NO
    ");
    43     }
    44     return 0;
    45 }
    
    
    
  • 相关阅读:
    【洛谷6620】[省选联考 2020 A 卷] 组合数问题(下降幂)
    【AtCoder】AtCoder Grand Contest 033 解题报告
    【AtCoder】AtCoder Grand Contest 034 解题报告
    【洛谷5445】[APIO2019] 路灯(树套树)
    【LOJ6059】「2017 山东一轮集训 Day1」Sum(倍增优化数位DP+NTT)
    【LOJ6159】「美团 CodeM 初赛 Round A」最长树链(树的直径)
    重新入门的Polya定理
    【洛谷6105】[Ynoi2010] y-fast trie(set)
    【BZOJ4480】 [JSOI2013] 快乐的jyy(回文自动机裸题)
    【LOJ6172】Samjia 和大树(树形DP+猜结论)
  • 原文地址:https://www.cnblogs.com/ZERO-/p/9703129.html
Copyright © 2011-2022 走看看