Killing Monsters

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 1158 Accepted Submission(s):
527

Problem Description
Kingdom Rush is a popular TD game, in which you should
build some towers to protect your kingdom from monsters. And now another wave of
monsters is coming and you need again to know whether you can get through
it.

The path of monsters is a straight line, and there are N blocks on it
(numbered from 1 to N continuously). Before enemies come, you have M towers
built. Each tower has an attack range [L, R], meaning that it can attack all
enemies in every block i, where L<=i<=R. Once a monster steps into block
i, every tower whose attack range include block i will attack the monster once
and only once. For example, a tower with attack range [1, 3] will attack a
monster three times if the monster is alive, one in block 1, another in block 2
and the last in block 3.

A witch helps your enemies and makes every
monster has its own place of appearance (the ith monster appears at block Xi).
All monsters go straightly to block N.

Now that you know each monster has
HP Hi and each tower has a value of attack Di, one attack will cause Di damage
(decrease HP by Di). If the HP of a monster is decreased to 0 or below 0, it
will die and disappear.
Your task is to calculate the number of monsters
surviving from your towers so as to make a plan B.

 
Input
The input contains multiple test cases.

The
first line of each case is an integer N (0 < N <= 100000), the number of
blocks in the path. The second line is an integer M (0 < M <= 100000), the
number of towers you have. The next M lines each contain three numbers, Li, Ri,
Di (1 <= Li <= Ri <= N, 0 < Di <= 1000), indicating the attack
range [L, R] and the value of attack D of the ith tower. The next line is an
integer K (0 < K <= 100000), the number of coming monsters. The following
K lines each contain two integers Hi and Xi (0 < Hi <= 10^18, 1 <= Xi
<= N) indicating the ith monster’s live point and the number of the block
where the ith monster appears.

The input is terminated by N = 0.

 
Output
Output one line containing the number of surviving
monsters.
 
Sample Input
5
2
1 3 1
5 5 2
5
1 3
3 1
5 2
7 3
9 1
0
 
Sample Output
3
 
Hint
 

In the sample, three monsters with origin HP 5, 7 and 9 will survive.

 

题意:
n个格子,m个塔,每个塔有攻击范围[ l , r ],从格子 l 开始到格子 r 的范围内~每个敌人会受到di点伤害,
然后给出k个敌人的hp和初始位置,这k个敌人朝着第n个格子走去,如果敌人的hp小于等于0就会死亡,问最后又多少个敌人存活;

思路:开一个大小为N的数组attack,初始化为0;对于每个tower的攻击(l,r,d)将attack[l]的值加上d,attack[r+1]的值减去d,然后对attack数组从前往后扫一遍,可以求出经过每个格子时,受的攻击值;再对attack数组从后往前扫一遍,又可以求出每个格子出发到格子N,受到的总攻击值,最后,对每个怪物判断血量是否足够即可,时间复杂度o(N)。
 
#include<stdio.h>
#include<string.h>
#define ll __int64 ll N,l,r,d,m,k,count,h,x;
ll attack[+];
int main()
{
ll i,j;
while(scanf("%I64d",&N),N)
{
memset(attack,,sizeof(attack));
count=N;
scanf("%I64d",&m);
for(i=;i<m;i++)
{
scanf("%I64d%I64d%I64d",&l,&r,&d);
attack[l]+=d;
attack[r+]-=d;
}
for(i=;i<=N;i++)//从前往后扫一遍
{
attack[i]+=attack[i-];
}
for(i=N-;i>=;i--)//从后往前扫一遍
{
attack[i]+=attack[i+];
}
scanf("%I64d",&k);
for(i=;i<k;i++)
{
scanf("%I64d%I64d",&h,&x);
if(attack[x]>=h)
count--;
}
printf("%I64d\n",count);
}
return ;
}

昨天又比赛去了,然后就忘记写博客了,,,,,还要继续努力啊!

 

Killing Monsters(hdu4970)的更多相关文章

  1. hdu4970 Killing Monsters (差分数列)

    2014多校9 1011 http://acm.hdu.edu.cn/showproblem.php?pid=4970 Killing Monsters Time Limit: 2000/1000 M ...

  2. 周赛-Killing Monsters 分类: 比赛 2015-08-02 09:45 3人阅读 评论(0) 收藏

    Killing Monsters Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...

  3. HDU 4970 Killing Monsters(树状数组)

    Killing Monsters Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  4. hdu 4970 Killing Monsters(数组的巧妙运用) 2014多校训练第9场

    pid=4970">Killing Monsters                                                                   ...

  5. 【HDU4970】Killing Monsters

    题意 数轴上有n个点,有m座炮塔,每个炮塔有一个攻击范围和伤害,有k个怪物,给出他们的初始位置和血量,问最后有多少怪物能活着到达n点.n<=100000 分析 对于某个怪物,什么情况下它可以活着 ...

  6. hdu 4970 Killing Monsters(数学题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4970 Problem Description Kingdom Rush is a popular TD ...

  7. hdu 4970 Killing Monsters (思维 暴力)

    题目链接 题意: 有n座塔,每座塔的攻击范围为[l,r],攻击力为d,有k个怪兽从这些塔前面经过,第i只怪兽初始的生命力为hp,出现的位置为x,终点为第n个格子.问最后有多少只怪兽还活着. 分析: 这 ...

  8. HDU 4970 Killing Monsters

    开始以为是线段树,算了一下复杂度也觉得能过...但是这题貌似卡了线段树... 具体做法: 对每一个塔,记录attack[l]+=d,attack[r+1]-=d;这样对于每个block,受到的伤害就是 ...

  9. codechef Killing Monsters

    题目大意:大厨正在玩一个打怪兽的小游戏.游戏中初始时有 n 只怪兽排成一排,从左到右编号为 0 ∼ n − 1.第 i 只怪兽的初始血量为 hi,当怪兽的血量小于等于 0 时,这只怪兽就挂了. 大厨要 ...

随机推荐

  1. php防sql注入过滤代码

    防止sql注入的函数,过滤掉那些非法的字符,提高sql安全性,同时也可以过滤XSS的攻击. function filter($str) { if (empty($str)) return false; ...

  2. mysql日期时间函数使用总结

     获取函数 mysql默认的时间格式: yyyy-MM-dd 或者 yyyy-MM-dd HH:mm:ss 1. Date() 返回日期部分, date('2018-02-14 17:03:04') ...

  3. 【翻译】 Windows 内核漏洞学习—空指针解引用

    Windows Kernel Exploitation – NullPointer Dereference 原文地址:https://osandamalith.com/2017/06/22/windo ...

  4. mysql创建账号及管理权限

    mysql创建账号及管理权限 0.mysql版本8.0.15,服务器版本:RHEL 6.5 1.创建用户名密码 mysql> use mysql; mysql> create user ' ...

  5. isBalanced函数实现

    原文:从一道面试题谈起,作者:360奇舞团 刘观宇 题目: 创建一个函数来判断给定的表达式中的大括号是否闭合,返回 true/false,对于空字符串,返回 true var expression = ...

  6. solr初识

    参考资料http://blog.csdn.net/l1028386804/article/details/70199983

  7. POJ 2572

    #include<stdio.h> #include<iostream> #include<string> using namespace std; int mai ...

  8. vue教程1-02 data里面存储数据

    vue教程1-02 data里面存储数据 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  9. python中内建函数isinstance的用法

    语法:isinstance(object,type) 作用:来判断一个对象是否是一个已知的类型. 其第一个参数(object)为对象,第二个参数(type)为类型名(int...)或类型名的一个列表( ...

  10. 剑指offer一之二维数组中的查找

    一.题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 二.解答方法: 方法 ...