比赛 果蝇王邀请赛div2 评测结果 WWWWWWWWWWWWWWWWWWWW
题目名称 果蝇诱饵 最终得分 0
用户昵称 Ruyi 运行时间 1.889 s
代码语言 C++ 内存使用 4.63 MiB
提交时间 2026-08-27 12:52:33
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
#define N 200001
using namespace std;
ll t,n,k,l,lt,rt;
double a[N],ans;
int 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>>a[i];
        sort(a+1,a+n+1);
        lt=1;
        rt=n;
        while(lt<rt&&k>0){
            k--;
            if(a[lt+1]-a[lt]>=max(a[lt],l-a[rt])*2){
                if(a[lt+1]-a[lt]>=a[rt]-a[rt-1]){
                    ans+=a[lt+1]-(a[lt+1]+a[lt])/2;
                    a[lt]=a[lt+1]=(a[lt+1]+a[lt])/2;
                    lt++;
                }else{
                    ans+=a[rt]-(a[rt]+a[rt-1])/2;
                    a[rt-1]=a[rt]=(a[rt]+a[rt-1])/2;
                    rt--;
                }
            }else if(a[rt]-a[rt-1]>=max(a[lt],l-a[rt])*2){
                ans+=a[rt]-(a[rt]+a[rt-1])/2;
                a[rt-1]=a[rt]=(a[rt]+a[rt-1])/2;
                rt--;
            }else break;
        }
        ans+=(k-(k%2))*(l+a[lt]);
        if(k%2) ans+=max(a[lt],l-a[rt]);
        cout<<ans<<endl;
        ans=0;
    }
    return 0;
}