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