hud 4970 Killing Monsters 模拟

来源:互联网 发布:linux程序开机启动 编辑:程序博客网 时间:2024/06/07 01:03

题意:N个格子排成一条线,有M个炮塔,每个炮塔的覆盖范围为(L,R),伤害值为D,有Q个怪,每个怪都有一个HP和出现的位置S,怪从左往右走,问最后有几个怪能活下来.

思路:万恶的先入为主思想,一开始我就自以为很聪明地想用线段树,结果就T,常数太大.后来发现想复杂了,因为全市区间,所以只需要记录前一个格子的伤害值于后一个伤害值的关系,记录完之后从后往前推出每个格子的伤害就好,O(N)的复杂度就能模拟出来.


#include <cstdio>#include <cstring>#include <iostream>#include <queue>using namespace std;#define maxn 100010long long sum[maxn],h;int main(){        int cnt,l,r,d,s,n,m,q;       // freopen("data.in","r",stdin);        while(1){                scanf("%d",&n);                if(n==0) break;                memset(sum,0,sizeof(sum));                scanf("%d",&m);                for(int i=0;i<m;i++){                        scanf("%d%d%d",&l,&r,&d);                        sum[l-1]-=d;                        sum[r]+=d;                }                for(int i=n-1;i>0;i--){                        sum[i]+=sum[i+1];                }                for(int i=n-1;i>0;i--){                        sum[i]+=sum[i+1];                }                cnt=0;                scanf("%d",&q);                for(int i=0;i<q;i++){                        scanf("%I64d%d",&h,&s);                        if(sum[s]<h) cnt++;                }                printf("%d\n",cnt);        }}


0 0
原创粉丝点击