| 比赛 |
果蝇王邀请赛div2 |
评测结果 |
AAWWWWWWWWWWWWWWWWWW |
| 题目名称 |
果蝇诱饵 |
最终得分 |
10 |
| 用户昵称 |
x123456 |
运行时间 |
1.514 s |
| 代码语言 |
C++ |
内存使用 |
5.75 MiB |
| 提交时间 |
2026-08-27 11:11:43 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct no{
int a,b,idx;
}c[200005];
bool cmp(no a,no b){
return a.b<b.b;
}
int t,n;
ll k,l,a[200005];
void solve1(){
ll x,ans=0;
scanf("%lld",&x);
ans+=max(x,l-x);
ans+=(k-1)*l;
printf("%lld\n",ans);
}
void solve2(){
ll x,y,ans=0,cnt=0;
scanf("%lld%lld",&x,&y);
ans+=(y-x)/2;
k--;
if(k==0)printf("%lld\n",ans);
ans+=max(x+(y-x)/2,l-(x+(y-x)/2));
k--;
if(k==0)printf("%lld\n",ans);
ans+=l*k;
printf("%lld\n",ans);
}
int main(){
freopen("fly.in","r",stdin);
freopen("fly.out","w",stdout);
scanf("%d",&t);
while(t--){
ll ans=0,s,e;
scanf("%d%lld%lld",&n,&k,&l);
if(n==1){
solve1();
continue;
}
else if(n==2){
solve2();
continue;
}
for(int i=1;i<=n;i++)c[i]={0,0,0};
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
sort(a+1,a+1+n);
s=a[1];
c[1].a=a[2];
c[1].b=c[1].a-s;
c[1].idx=1;
for(int i=2;i<=n-1;i++){
c[i].a=a[i+1];
c[i].b=c[i].a-c[i-1].a;
c[i].idx=i;
}
e=c[n-1].a;
sort(c+1,c+n,cmp);
int cnt=0;
for(int i=n-1;i;i--){
ans+=c[i].b/2;
s+=c[i].b/2;
e-=c[i].b/2;
if(c[i].idx>c[1].idx){
c[1].a+=c[i].b/2;
}
else if(c[i].idx<=c[1].idx){
c[1].a-=c[i].b/2;
}
cnt++;
if(cnt==k)break;
}
ll en=c[1].a;
if(cnt==k){
printf("%lld\n",ans);
continue;
}
else{
cnt++;
ans+=max(e,l-e);
ans+=l*(k-cnt);
printf("%lld\n",ans);
}
}
return 0;
}