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