| 比赛 |
果蝇王邀请赛div2 |
评测结果 |
AWAAAAAAAAAAAAAAAAAA |
| 题目名称 |
果蝇诱饵 |
最终得分 |
95 |
| 用户昵称 |
对立猫猫对立 |
运行时间 |
1.405 s |
| 代码语言 |
C++ |
内存使用 |
5.21 MiB |
| 提交时间 |
2026-08-27 09:36:46 |
显示代码纯文本
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define maxn 200005
using namespace std;
int T, n, k, l, ans;
int pos[maxn];
int len[maxn], fr, ed;
bool cmp(int a, int b) {
return a > b;
}
signed main() {
freopen("fly.in", "r", stdin);
freopen("fly.out", "w", stdout);
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> T;
while(T--) {
cin >> n >> k >> l;
for(int i = 1; i <= n; i++) {
cin >> pos[i];
}
sort(pos + 1, pos + n + 1);
for(int i = 1; i <= n; i++) {
len[i] = pos[i] - pos[i - 1];
}
fr = len[1], ed = l - pos[n];
sort(len + 2, len + n + 1, cmp);
int sum = 0;
ans = max(fr * k + ed * (k - 1), fr * (k - 1) + ed * k);
for(int i = 2; i <= n; i++) {
if(i - 2 + 1 > k) break;
sum += len[i];
fr += sum >> 1;
ed += sum >> 1;
ans = max(ans, (sum >> 1) + max(
fr * (k - (i - 2 + 1)) + ed * (k - (i - 2 + 1) - 1),
ed * (k - (i - 2 + 1)) + fr * (k - (i - 2 + 1) - 1)));
fr -= sum >> 1;
ed -= sum >> 1;
}
cout << ans << endl;
}
return 0;
}