• NBUT 1455 Malphite (模拟水题)


    • [1455] Malphite

    • 时间限制: 1000 ms 内存限制: 65535 K
    • 问题描述
    • Granite Shield(花岗岩护盾) - Malphite is shielded by a layer of rock which absorbs damage up to 10% of his maximum Health.

       

      If Malphite has not been hit for 10 seconds, this effect recharges.

       

      To simply this problem all the calculation will in integer not decimal. For example, 15 / 10is 1 not 1.5.

    • 输入
    • There are muti-case.
      For each case, the first line contain two integer M (0 < m < 10000), N (0 < N < 10000).
      M means to the maximum health, N is the time Malphite is attacked.
      The following N lines, each line contain two integer Ti ( 0 ≤ Ti ≤ 10000), Di (0 < Di ≤ 100), stands for the attack time and the damage.
    • 输出
    • For each test case, output the Malphite's final health value, if Malphite can't afford all these damage, print "I'm dead!".
    • 样例输入
    • 10 2
      1 3
      4 5
      10 2
      1 3
      11 5
      10 1
      11 11
    • 样例输出
    • 3
      4
      I'm dead!
    • 提示
    • 来源
    • Monkeyde17

    题意:熔岩巨兽-墨菲特有个被动技能就是只要自己10秒不被攻击,就有一个盾,盾能承受的最大伤害是生命值的10%,给出被攻击的时间和伤害,求最后情况。

    分析:模拟,按照时间先后给造成的伤害排个序,然后首先判断盾有没有更新,有更行的话盾的值就是生命值的10%,没有更新的话,就是上次盾剩下的值继续减。

    #pragma comprint(linker, "/STACK:1024000000,1024000000")
    #include<cstdio>
    #include<string>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<stack>
    #include<queue>
    #include<vector>
    #include<map>
    #include<stdlib.h>
    #include<time.h>
    #include<algorithm>
    #define LL __int64
    #define FIN freopen("in.txt","r",stdin)
    using namespace std;
    const int MAXN=10000+5;
    struct node
    {
        int t,atk;
        bool operator<(const node A)const
        {
            if(t==A.t) return atk>A.atk;
            return t<A.t;
        }
    }a[MAXN];
    int main()
    {
        //FIN;
        int n,m;
        while(scanf("%d %d",&n,&m)!=EOF)
        {
            for(int i=0;i<m;i++)
                scanf("%d %d",&a[i].t,&a[i].atk);
    
            sort(a,a+m);
            //for(int i=0;i<m;i++) printf("%d %d
    ",a[i].t,a[i].atk);
            bool flag=false;
            int pre=0;
            int dun=n/10;
            int h=n;
    
            dun=dun-a[0].atk;
            if(dun<=0) {h=h+dun;dun=0;}
            pre=a[0].t;
            if(h<=0){printf("I'm dead!
    ");continue;}
    
            for(int i=1;i<m;i++)
            {
                if(a[i].t-pre>=10) dun=n/10-a[i].atk;
                else dun=dun-a[i].atk;
                
                if(dun<=0) {h=h+dun;dun=0;}
                pre=a[i].t;
                if(h<=0) {flag=true;break;}
            }
            if(flag) printf("I'm dead!
    ");
            else printf("%d
    ",h);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    理解SQL SERVER中非聚集索引的覆盖,连接,交叉和过滤
    TSQL查询进阶流程控制语句
    效率最高的Excel数据导入(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)
    SQL Service自定义数据类型
    理解SQL SERVER中的逻辑读,预读和物理读
    TSQL查询进阶深入理解子查询
    SQL查询入门(下篇)
    使用SQL进行递归查询
    利用 sys.sysprocesses 检查 Sql Server的阻塞和死锁
    灵活运用 SQL SERVER FOR XML PATH
  • 原文地址:https://www.cnblogs.com/clliff/p/4749425.html
Copyright © 2020-2023  润新知