差分数组

疯狂植物大战僵尸

Description

《植物大战僵尸》是一款极富策略性的小游戏。可怕的僵尸即将入侵,每种僵尸都有不同的特点,例如铁桶僵尸拥有极强的抗击打能力,矿工僵尸可以挖地道绕过种植在土壤表面的植物等。玩家防御僵尸的方式就是栽种植物。4949种植物每种都有不同的功能,例如樱桃炸弹可以和周围一定范围内的所有僵尸同归于尽,而食人花可以吃掉最靠近自己的一只僵尸。玩家可以针对不同僵尸的弱点来合理地种植植物,这也是胜利的诀窍。游戏根据玩法不同分为五种游戏模式:冒险、生存、花瓶破碎者、小游戏、花园。加之黑夜、屋顶、浓雾以及泳池之类的障碍增加了其挑战性该游戏近乎永无止境。

这款游戏要求玩家既有是大脑的智慧,又有小脑的反应。在有了正确的战略思想之后,还要靠战术将战略实现出来。战术范围包括很广,植物的搭配、战斗时的阵型、植物与僵尸相遇时是战是防这都属于战术的范畴。正确的战术是玩家在战斗中胜利关键。选择正确的战术,需要先分析情况,再做出决定。那么提高战术水平也是要提高分析情况的能力。

最近系统更新了一种新玩法,玩家视角由防止僵尸入侵变成了扮演僵尸,一共有nn条道,每条道上只有一个坚果,每个坚果都有自己的生命值。由你扮演僵尸博士,现在你能进行mm波群体攻击,每次攻击能对对面某个范围内的每个坚果造成一点伤害,mm轮攻击之后,你放出了终极大招"宇宙超级无敌天霸轰轰轰轰冲击波",冲击波对每个坚果的攻击值都为kk,由于耗能太高冲击波只能使用一次。当坚果的生命值小于或等于00时,你可以成功吃到脑子!

Input

第一行输入22个整数nnmmkk(0<n,m<106,0<k<1000)(0<n,m<106,0<k<1000),分别表示有多少条道(即坚果数)、能进行多少轮的群攻以及冲击波攻击值大小。

接下来一行nn个数a1a2a3...ai...ana1、a2、a3...ai...an,表示第ii个坚果的生命值;

接下来mm行,第ii行两个整数llrr表示第ii轮攻击的范围(包括llrr(0<lr<n)(0<l≤r<n)

Output

输出一行,按照从小到大的顺序输出能派僵尸的道的序号,中间以空格分隔,末尾没有空格;如果一个脑子都不能吃到的话,输出“Game Over”。

Sample Input 1 

7 4 4  
7 7 7 7 7 7 7  
1 3  
2 6  
3 5  
7 7

Sample Output 1

3

这道题主要是如果用数组一个一个加就容易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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值