Problem - 2157D - Codeforces

Problem - 2157D - Codeforces

如果ai在整个区间左侧 那么我们可以无脑选择ai<p 右侧无脑选择ai>pi

我们对数组排序后 去数组的中位数 mid=a(n+1)/2 如果区间在中位数的右侧 那么很明显 区间的最左端是区间最小的地方 区间的最右端是最大的地方 因为区间左边的点数目多于右侧 那么我们就计算所有点到区间左端点的距离和

如果区间的右端点在mid的左侧 那么说明区间的最小值在区间的右端点 计算所有点到右端点的距离和就是答案

如果mid在区间内部 mid处取到最小值 直接累加距离即可

代码如下:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
void solve(){
    int n,l,r;
    cin>>n>>l>>r;
    vector<int>a(n+1);
    for(int i=1;i<=n;i++)cin>>a[i];
    sort(a.begin()+1,a.end());
    int mid=a[(n+1)/2];
    if(mid<l)mid=l;
    else if(mid>r)mid=r;
    int ans=0;
    for(int i=1;i<=n;i++){
        ans+=abs(a[i]-mid);
    }
    cout<<ans<<'\n';
}
signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t;
    cin>>t;
    while(t--)solve();
    return 0;
}
相关推荐
hongyucai6 分钟前
详解rlinf强化学习四步曲
人工智能·python·算法·架构
变量未定义~7 分钟前
ST表-龙骑士军团【算法赛】
数据结构·算法
小帽子_12327 分钟前
储能 SOC/SOH 精准估算技术:储能工况下算法优化与误差修正方案
算法
hhlongg32 分钟前
FFT分析
算法
水龙吟啸1 小时前
华为2026.6.17机考选择题+编程题【速刷敲黑板】
人工智能·深度学习·算法·华为
凌波粒1 小时前
LeetCode--53. 最大子序和(贪心算法)
算法·leetcode·贪心算法
Hesionberger1 小时前
快速求解完全平方数的最少数量
开发语言·数据结构·python·算法·leetcode·c#
c238561 小时前
《序列 DP:C++ 中的“最长”套路与编辑距离》
c++·算法·动态规划
aqiu1111111 小时前
【算法日记 19】LeetCode 1. 两数之和:梦开始的地方,哈希表的降维打击
算法·leetcode·职场和发展
CS创新实验室11 小时前
算法、齿轮与硅基大脑:数值计算发展简史
人工智能·算法·数值计算