首页 > 代码库 > XidianOJ 1062 Black King Bar

XidianOJ 1062 Black King Bar

题目描述

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)的特殊情况

 

XidianOJ 1062 Black King Bar