| 比赛 |
果蝇王邀请赛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;
}