显然的若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;
}