-
[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; }