CF1684D Traps

知识点:贪心

难度:4

这个贪心其实还是很简单的推一下式子就出来了,我们假设已经有k个位置用了跳过陷阱的机会,然后把任意下标设出来,得出这个位置伤害减免,然后求和,就可以得到一些常数,以及为了让这个伤害减免,我们的排序依据,从大到小排序取前面的k个数就行了

注意数据要开long long

#include <bits/stdc++.h>

using namespace std;

const int N = 2e5 + 5;

int a[N];

int main() {
	int T;
	cin >> T;
	while (T--) {
		int n;
		long long k;
		cin >> n >> k;
		long long tot = 0, rec = 0;
		for (int i = 1; i <= n; i++) {
			scanf("%d", a + i);
			tot += (long long) a[i];
			a[i] += i;
		}
		sort(a + 1, a + n + 1);
		reverse(a + 1, a + n + 1);
		for (int i = 1; i <= k; i++) {
			rec += (long long) a[i];
		}
		rec += (long long) k * (k - n) - (k + 1) * k / 2;
		cout << tot - rec << '\n';
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值