1 条题解

  • 0
    @ 2026-2-1 22:36:11
    #include<bits/stdc++.h>
    using namespace std; 
    
    // [1] 全局数组,存储每组测试用例的住户位置,容量满足题目n≤1000的限制
    int arr[2000];
    
    int main(){
        // [2] 读取测试用例的组数
        int t;
        cin>>t;
    
        // [3] 循环处理每组测试用例,直到所有用例处理完成
        while(t--){
            // [4] 读取当前测试用例的住户数量
            int  n;
            cin>>n;
    
            // [5] 读取n个住户的位置,存入数组arr
            for(int i=0;i<n;i++)	
                cin>>arr[i];
    
            // [6] 对住户位置数组进行升序排序,为后续找中位数做准备
            sort(arr,arr+n);
    
            // [7] 确定商店的最优位置:取排序后的中位数(n/2下标对应较大的中位数,满足题目“多最优位置选最大”的要求)
            int avg=arr[n/2]; // avg:最终确定的商店位置
    
            // [8] 初始化所有住户到商店的距离总和为0
            int sum=0;
    
            // [9] 遍历所有住户,计算到商店位置的距离总和
            for(int i=0;i<n;i++){
                // 计算当前住户与商店的距离(等价于abs(arr[i] - avg))
                if(arr[i]<avg) 
                    sum+=avg-arr[i];
                else 
                    sum+=arr[i]-avg;
            }
    
            // [10] 输出商店位置和距离总和
            cout<<avg<<" "<<sum<<endl; 
        } 
        return 0;
    }
    
    • 1

    信息

    ID
    1046
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    5
    已通过
    1
    上传者