显然的若l>n则只需要x或y为中点,否则x和y到中点距离相同,我们设置一个函数f来求l到r中所有数到x的距离和,代码就能非常短

#include <bits/stdc++.h>
#define int long long
using namespace std;
int f(int l,int r,int mid){
    return mid*(mid-l+1)-(mid+l)*(mid-l+1)/2+(mid+r)*(r-mid+1)/2-mid*(r-mid+1);
}
signed main(){
    int t;cin>>t;
    while(t--){
        int n,l;cin>>n>>l;
        int mid=1+n>>1;
        if(l<n){
            int x=mid-l/2,y=mid+(l-l/2);
            cout<<x<<" "<<y<<" "<<f(1,mid,x)+f(mid+1,n,y)<<endl;
        }else
            cout<<mid<<" "<<mid+l<<" "<<f(1,n,mid)<<endl;
    }
    return 0;
}