比赛 果蝇王邀请赛div2 评测结果 TAATTTTTTTTTTTTTTTTT
题目名称 果蝇诱饵 最终得分 10
用户昵称 wmlsxzh 运行时间 19.970 s
代码语言 C++ 内存使用 6.10 MiB
提交时间 2026-08-27 11:51:50
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define MAXN 200005
//first为距离 second为下标
int t,n,k,l,ans,a[MAXN];
bool cmp(pair<int,int> a,pair<int,int>b){
    return a>b;
}
int compute(int n,int k,int l){
    vector<pair<int,int>> diff;
    int ans = -1;
    a[0]=0;a[n+1]=l;
    for(int i=1;i<=n;++i){
        scanf("%lld ",&a[i]);
    }
    sort(a+1,a+1+n);
    for(int i=1;i<=n;++i){
        diff.push_back(make_pair(a[i]-a[i-1],i));
    }
    sort(diff.begin(),diff.end(),cmp);
    for(int i=0;i<=min(k,n-1);++i){
        int head = a[1],tail =(a[n+1]-a[n]);
//        cout<<"start,h:"<<head<<" t:"<<tail<<'\n';
        int res = 0;
//        cout<<"第"<<i<<"轮\n";
        for(int j=0;j<i;++j){
            int curs = diff[j].first;
//            cout<<k<<"th, "<<"v:"<<curs<<'\n';
            int d = curs / 2;
            res += d;
            head += d;
            tail += d;
//            cout<<"change,h: "<<head<<" t:"<<tail<<" r:"<<res<<'\n';
        }
        for(int j=0;j<k-i;++j){
            if(head>tail){
                res += head;
                tail += head;
                head = 0;
            }
            else{
                res += tail;
                head += tail;
                tail = 0;
            }
//            cout<<"change,h: "<<head<<" t:"<<tail<<" r:"<<res<<'\n';
        }
//        cout<<"本轮结果:"<<res<<"\n\n";
        ans = max(ans,res);
    }
    return ans;
}
signed main(){
    freopen("fly.in","r",stdin);
    freopen("fly.out","w",stdout);
    scanf("%lld\n",&t);
    while(t--){
        scanf("%lld %lld %lld\n",&n,&k,&l);
        ans = compute(n,k,l);
        printf("%lld\n",ans);
//        cout<<"end\n\n";
    }
    return 0;
}