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