| 比赛 |
果蝇王邀请赛div2 |
评测结果 |
AWAAAAAAAAAAAAAAAAAA |
| 题目名称 |
果蝇诱饵 |
最终得分 |
95 |
| 用户昵称 |
LikableP |
运行时间 |
1.288 s |
| 代码语言 |
C++ |
内存使用 |
3.17 MiB |
| 提交时间 |
2026-08-27 12:06:01 |
显示代码纯文本
#include <cstdio>
#include <algorithm>
#include <vector>
const int MAXN = 200010;
int n;
long long k, l;
long long a[MAXN], delta[MAXN];
long long deltaLeft, deltaRight;
void Work() {
scanf("%d %lld %lld", &n, &k, &l);
for (int i = 1; i <= n; ++i) {
scanf("%lld", &a[i]);
}
std::sort(a + 1, a + n + 1);
deltaLeft = a[1], deltaRight = l - a[n];
for (int i = 2; i <= n; ++i) {
delta[i] = (a[i] - a[i - 1]) >> 1;
}
std::sort(delta + 2, delta + n + 1, [](int x, int y) { return x > y; });
long long sumdelta = 0, ans = 0;
for (int i = 0; i <= std::min((int) k, n - 1); ++i) {
int used = i;
int remain = k - used;
sumdelta += delta[used + 1];
deltaLeft += delta[used + 1];
deltaRight += delta[used + 1];
ans = std::max(ans, sumdelta + std::max(deltaLeft, deltaRight) + (remain - 1) * (deltaLeft + deltaRight));
}
printf("%lld\n", ans);
}
int T;
int main() {
freopen("fly.in", "r", stdin);
freopen("fly.out", "w", stdout);
scanf("%d", &T);
while (T--) {
Work();
}
return 0;
}