CSUSTOJ-白银探病篇(简单思维)
题目链接:http://acm.csust.edu.cn/problem/4045
CSDN食用链接:https://blog.csdn.net/qq_43906000/article/details/109481530
Description
在上一个决定谁去探病的游戏中,如果你没有成功帮助藤原千花获胜,那么最终三人中最聪明的白银获得了探病权,如果你成功帮助藤原千花获胜,那么很抱歉,藤原书记作弊被抓了,你和她都被罚打扫学生会办公室一周。
回到正题,白银正在纠结去探病应该带什么礼物,他来到了商场,这里摆着 \(n\) 个商品,白银以自己对辉夜的了解给每个物品设置了一个好感度 \(a_i\) , 好感度越高代表辉夜越喜欢这个礼物,为了让辉夜高兴,白银决定让好感度的和越大越好,但是白银卖商品有一个奇怪的习惯,他每次会选择连续 \(k\) 个商品中,好感度最大的商品购买,如果剩余商品数量小于 \(k\) 个,则停止购买,请你计算出他购买的商品的好感度和的最大值。
注:当一个商品被买走时,剩下的商品会在相对顺序不变的情况下合并,所以可以认为所有商品一直是连续的。
input
给你两个整数\(n,k(1\leq n,k \leq 1e5)\),表示商品的个数和白银每次选择的区间长度.
接下来一行 \(n\)个数,第\(i\)个数表示第\(i\)个商品的好感度\(a_i\)\((1\leq a_i \leq 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;
}
路漫漫兮