For kazmodon!
——A DotA hero using BKB
一天,lw梦见自己在打dota,然而对面是一个加强过的卡尔!于是,他每次都被n个技能瞬间秒杀。愤怒的lw决定买BKB,来加强生存力。
由于加强过的卡尔是电脑操作的,他每次看见lw时,只会以1毫秒的时间间隔连续放n个技能,第i个技能造成ki点伤害。如果某个技能没有成功放出来,他也不会试图再次释放该技能。已知lw的BKB可以为他提供t毫秒的魔免时间(即,能抵挡连续的t个技能),那么BKB至多能降低多少伤害呢?
For kazmodon!
——A DotA hero using BKB
一天,lw梦见自己在打dota,然而对面是一个加强过的卡尔!于是,他每次都被n个技能瞬间秒杀。愤怒的lw决定买BKB,来加强生存力。
由于加强过的卡尔是电脑操作的,他每次看见lw时,只会以1毫秒的时间间隔连续放n个技能,第i个技能造成ki点伤害。如果某个技能没有成功放出来,他也不会试图再次释放该技能。已知lw的BKB可以为他提供t毫秒的魔免时间(即,能抵挡连续的t个技能),那么BKB至多能降低多少伤害呢?
多组数据(不超过10组)。
每组数据,第一行2个整数n、t,第二行n个整数k1,k2,...,kn,用空格分割。
数据保证1<=n<=100000,1<=t<=10000,0<=ki<=1000。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; LL k[100001]; int n,t; int main(){ while (scanf("%d %d",&n,&t) != EOF){ LL sum = 0,max = 0; k[0] = 0; int i; for (i=1;i<=n;i++){ scanf("%d",&k[i]); sum += k[i]; if (i >= t){ sum -= k[i-t]; if (sum > max) max = sum; } } if (max == 0){ max = sum; } printf("%lld\n",max); } return 0; }
输出1行,一个整数,表示BKB能避免的最大伤害。
--正文
特殊的区间操作,直接在读入数据的时候就可以开始处理了
注意(n < t)的特殊情况
原文:http://www.cnblogs.com/ToTOrz/p/6115228.html