题目链接:http://acm.csust.edu.cn/problem/4045
博客园食用链接:https://www.cnblogs.com/lonely-wind-/p/13941867.html
Description
在上一个决定谁去探病的游戏中,如果你没有成功帮助藤原千花获胜,那么最终三人中最聪明的白银获得了探病权,如果你成功帮助藤原千花获胜,那么很抱歉,藤原书记作弊被抓了,你和她都被罚打扫学生会办公室一周。
回到正题,白银正在纠结去探病应该带什么礼物,他来到了商场,这里摆着 n n n 个商品,白银以自己对辉夜的了解给每个物品设置了一个好感度 a i a_i ai , 好感度越高代表辉夜越喜欢这个礼物,为了让辉夜高兴,白银决定让好感度的和越大越好,但是白银卖商品有一个奇怪的习惯,他每次会选择连续 k k k 个商品中,好感度最大的商品购买,如果剩余商品数量小于 k k k 个,则停止购买,请你计算出他购买的商品的好感度和的最大值。
注:当一个商品被买走时,剩下的商品会在相对顺序不变的情况下合并,所以可以认为所有商品一直是连续的。
input
给你两个整数 n , k ( 1 ≤ n , k ≤ 1 e 5 ) n,k(1\leq n,k \leq 1e5) n,k(1≤n,k≤1e5),表示商品的个数和白银每次选择的区间长度.
接下来一行 n n n个数,第 i i i个数表示第 i i i个商品的好感度 a i a_i ai ( 1 ≤ a i ≤ 1 e 7 ) (1\leq a_i \leq 1e7) (1≤ai≤1e7)
output
输出一个正整数,表示白银购买的商品的好感度和的最大值.
Sample Input 1
5 3
1 2 3 4 5
Sample Output 1
12
emmm,按照题目描述,我们会剩下k-1个值选不了,那么实际上这剩下的k-1个数就是最小的k-1个数,然后此题结束。。。。
以下是AC代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mac=1e5+10;
int a[mac];
int main(int argc, char const *argv[])
{
int n,k;
scanf ("%d%d",&n,&k);
ll ans=0;
for (int i=1; i<=n; i++)
scanf ("%d",&a[i]);
sort(a+1,a+1+n);
for (int i=k; i<=n; i++)
ans+=a[i];
printf("%lld\n",ans);
return 0;
}