Description
《植物大战僵尸》是一款极富策略性的小游戏。可怕的僵尸即将入侵,每种僵尸都有不同的特点,例如铁桶僵尸拥有极强的抗击打能力,矿工僵尸可以挖地道绕过种植在土壤表面的植物等。玩家防御僵尸的方式就是栽种植物。4949种植物每种都有不同的功能,例如樱桃炸弹可以和周围一定范围内的所有僵尸同归于尽,而食人花可以吃掉最靠近自己的一只僵尸。玩家可以针对不同僵尸的弱点来合理地种植植物,这也是胜利的诀窍。游戏根据玩法不同分为五种游戏模式:冒险、生存、花瓶破碎者、小游戏、花园。加之黑夜、屋顶、浓雾以及泳池之类的障碍增加了其挑战性该游戏近乎永无止境。
这款游戏要求玩家既有是大脑的智慧,又有小脑的反应。在有了正确的战略思想之后,还要靠战术将战略实现出来。战术范围包括很广,植物的搭配、战斗时的阵型、植物与僵尸相遇时是战是防这都属于战术的范畴。正确的战术是玩家在战斗中胜利关键。选择正确的战术,需要先分析情况,再做出决定。那么提高战术水平也是要提高分析情况的能力。
最近系统更新了一种新玩法,玩家视角由防止僵尸入侵变成了扮演僵尸,一共有nn条道,每条道上只有一个坚果,每个坚果都有自己的生命值。由你扮演僵尸博士,现在你能进行mm波群体攻击,每次攻击能对对面某个范围内的每个坚果造成一点伤害,mm轮攻击之后,你放出了终极大招"宇宙超级无敌天霸轰轰轰轰冲击波",冲击波对每个坚果的攻击值都为kk,由于耗能太高冲击波只能使用一次。当坚果的生命值小于或等于00时,你可以成功吃到脑子!
Input
第一行输入22个整数nn,mm,kk(0<n,m<106,0<k<1000)(0<n,m<106,0<k<1000),分别表示有多少条道(即坚果数)、能进行多少轮的群攻以及冲击波攻击值大小。
接下来一行nn个数a1、a2、a3...ai...ana1、a2、a3...ai...an,表示第ii个坚果的生命值;
接下来mm行,第ii行两个整数ll,rr表示第ii轮攻击的范围(包括ll,rr)(0<l≤r<n)(0<l≤r<n)
Output
输出一行,按照从小到大的顺序输出能派僵尸的道的序号,中间以空格分隔,末尾没有空格;如果一个脑子都不能吃到的话,输出“Game Over”。
这道题主要是如果用数组一个一个加就容易TLE ,比赛的时候很多人过不了大都是因为没有去优化,这里用差分数组是比较好解决的。但是也wa了,后面发现是命名空间的锅,用c语言写就能过,下面贴上AC代码:
#include<stdio.h>
#define max 1000005
int vis,attack[max],life[max];
int main()
{
int n,m,k;
scanf("%d %d %d",&n,&m,&k);
for(int i=1;i<=n;i++)
{
scanf("%d",&life[i]);
}
while(m--)
{
int x,y;
scanf("%d %d",&x,&y);
attack[x]+=1,attack[y+1]-=1;
}
for(int i=1;i<=n;i++)
{
attack[i]+=attack[i-1];
if(attack[i]+k>=life[i]&&vis==0)
{
printf("%d",i);
vis=1;
}
else if(attack[i]+k>=life[i]&&vis==1)
{
printf(" %d",i);
}
}
if(!vis)
{
printf("Game Over");
}
return 0;
}