1 solutions

  • 0
    @ 2025-10-1 10:30:14

    考虑用数组a储存温度

    最小值:

    当 w 比 a1​ 小最小的就是 a[n]​−w。 当 w 比 an​ 大,那最小就为 w−a[1] 否则就是a[n]​−a[1]​

    最大值:

    必然是先吃 a[1]​ 或 a[n] 下一个是与第一个选择的距离更远的 a[2]​ 或 a[n−1],由于不知道先吃 a[1]​ 和 a[n]那个最大,所以都跑一边取最大

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    int a[100005];
    int n , w;
    int minn(){ 
        if(w<a[1]){
        return a[n]-w;
    	}
    	else if(w>a[n]){
    		return w-a[1];
    	}
    	else{
    		return a[n]-a[1];
    	}
    }
    int first()
    {
        int sum = 0;
        int now_w = w; 
        int l = 1, r = n;
        for(int i = 1; i <= n; i++)
        {
            if(i % 2 == 1)
            {
                sum += max(abs(a[l] - now_w), abs(a[l] - w)); 
                now_w = a[l]; 
                l++;
            }
            else
            {
                sum += max(abs(a[r] - now_w), abs(a[r] - w));
                now_w = a[r];
                r--;
            }
        }
        return sum;
    }
    int last() 
    {
        int sum = 0;
        int now_w = w;
        int l = 1, r = n;
        for(int i = 1; i <= n; i++)
        {
            if(i % 2 == 1)
            {
                sum += max(abs(a[r] - now_w), abs(a[r] - w));
                now_w = a[r];
                r--;
            }
            else
            {
                sum += max(abs(a[l] - now_w), abs(a[l] - w));
                now_w = a[l];
                l++;
            }
        }
        return sum;
    }
    signed  main(){
    	cin>>n>>w;
    	for(int i=1;i<=n;i++){
    		cin>>a[i];
    	}
    	sort(a+1,a+n+1);
        cout << minn() << " ";
    	cout << max(first(),last());
    } 
    
    • 1

    Information

    ID
    3827
    Time
    2000ms
    Memory
    250MiB
    Difficulty
    5
    Tags
    # Submissions
    131
    Accepted
    28
    Uploaded By