| 比赛 |
果蝇王邀请赛div2 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
| 题目名称 |
果蝇诱饵 |
最终得分 |
100 |
| 用户昵称 |
hsl_beat |
运行时间 |
1.542 s |
| 代码语言 |
C++ |
内存使用 |
5.25 MiB |
| 提交时间 |
2026-08-27 10:18:14 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
//#define i64 long long
#define int long long
//struct node
//{
// int l, r, val, k;
//}bit[200005 << 3];
//int a[200005];
//void pushdown(int x)
//{
// bit[x << 1].k += bit[x].k;
// bit[x << 1 | 1].k += bit[x].k;
// bit[x << 1].val += bit[x].k * (bit[x << 1].r - bit[x << 1].l + 1);
// bit[x << 1 | 1].val += bit[x].k * (bit[x << 1 | 1].r - bit[x << 1 | 1].l + 1);
// bit[x].val = 0;
//}
//void pushup(int x)
//{
// bit[x].val = bit[x << 1].val + bit[x << 1 | 1].val;
//}
//void build(int x, int l, int r)
//{
// bit[x].l = l;
// bit[x].r = r;
// if (l == r) {
// bit[x].val = a[l];
// bit[x].k = 0;
// return;
// }
// int mid = (l + r) / 2;
// build(x << 1, l, mid);
// build(x << 1 | 1, mid + 1, r);
// pushup(x);
//}
//int query(int x, int l, int r)
//{
// if (bit[x].l > r || l > bit[x].r) {
// return 0;
// }
// if (l <= bit[x].l && bit[x].r <= r) {
// return bit[x].val;
// }
// pushdown(x);
// return query(x << 1, l, r) + query(x << 1 | 1, l, r);
//}
//void update(int x, int l, int r, int k)
//{
// if (l > r) {
// return;
// }
// if (l <= bit[x].l && bit[x].r <= r) {
// bit[x].val += k * (bit[x].r - bit[x].l);
// bit[x].k += k;
// return;
// }
// pushdown(x);
// int mid = (bit[x].l + bit[x].r) / 2;
// if (l <= mid) {
// update(x << 1, l, r, k);
// }
// if (mid < r) {
// update(x << 1 | 1, l, r, k);
// }
// pushup(x);
//}
void solve()
{
int n, k, l;
cin >> n >> k >> l;
vector<int> a(n + 1);
for (int i = 1; i <= n; ++i) {
cin >> a[i];
}
sort(a.begin() + 1, a.end());
int ans = 0;
priority_queue<int, vector<int>, less<int>> pq;
int d1 = a[1], d2 = l - a[n];
for (int i = 1; i < n; i++) {
pq.push((a[i + 1] - a[i]) / 2);
}
if (k) {
if (d1 > d2) {
ans += d1;
ans += (k - 1) * (d1 + d2);
} else {
ans += d2;
ans += (k - 1) * (d1 + d2);
}
}
// cout << ans << '\n';.
int cnt = 0;
while (pq.size() && k) {
k--;
cnt += pq.top();
d1 += pq.top();
d2 += pq.top();
int tp = 0;
if (k) {
if (d1 > d2) {
tp += d1;
tp += (k - 1) * (d1 + d2);
} else {
tp += d2;
tp += (k - 1) * (d1 + d2);
}
}
ans = max(ans, cnt + tp);
// cout << cnt + tp << '\n';
pq.pop();
}
if (k) {
if (d1 > d2) {
cnt += d1;
cnt += (k - 1) * (d1 + d2);
} else {
cnt += d2;
cnt += (k - 1) * (d1 + d2);
}
}
cout << max(ans, cnt) << '\n';
}
signed main()
{
freopen("fly.in", "r", stdin);
freopen("fly.out", "w", stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int T;
cin >> T;
while (T--) {
solve();
}
return 0;
}