比赛 果蝇王邀请赛div2 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 果蝇诱饵 最终得分 100
用户昵称 赵飞羽 运行时间 1.368 s
代码语言 C++ 内存使用 5.13 MiB
提交时间 2026-08-27 09:52:57
显示代码纯文本
#include <bits/stdc++.h>
#define int long long
using namespace std;

constexpr int N = 200010;
int T, n, k, l, a[N], ans, b[N];

bool cmp(int x, int y) {
	return x > y;
}

void sv1() {
	ans = max(a[1], l - a[1]);
	for (int i = 1; i <= k - 1; i++) ans += l;
	return;
}

void sv2() {
	for (int i = 2; i <= n; i++) ans = max(ans, (a[i] - a[i-1]) / 2);
	ans = max(ans, a[1]);
	ans = max(ans, l - a[n]);
	return;
}

void sv3() {
	for (int i = 2; i <= n; i++) b[i-1] = a[i] - a[i-1];
	sort(b+1, b+n, cmp);
	int al = a[1], ar = a[n], cnt = 0;
	for (int i = 1; i <= n - 1; i++) {
		if (k == i) {
			ans = max(ans, max(cnt + b[i] / 2, cnt + max(al, l - ar)));
			return;
		}
		ans = max(ans, cnt + max(al, l - ar) + (k - i) * (l - (ar - al)));
		cnt += b[i] / 2;
		al += b[i] / 2;
		ar -= b[i] / 2;
	}
	ans = max(ans, cnt + max(al, l - ar) + (k - n) * (l - (ar - al)));
	return;
}

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
	freopen("fly.in", "r", stdin);
	freopen("fly.out", "w", stdout);
	cin >> T;
	while (T--) {
		cin >> n >> k >> l;
		for (int i = 1; i <= n; i++) cin >> a[i];
		sort(a+1, a+1+n);
		ans = 0;
		if (n == 1) sv1();
		else if (k == 1) sv2();
		else sv3();
		cout << ans << "\n";
	}
	return 0;
}