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