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;
}
posted @ 2020-11-07 18:31  lonely_wind  阅读(176)  评论(0编辑  收藏  举报