给你n个点(n为偶数),找出n/2个点对,使这n/2个点对的曼哈顿距离之和最大,ac代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct nod{int x,y,i;}s[300001];
bool cmp1(nod a,nod b){return a.x<b.x;}
bool cmp2(nod a,nod b){return a.y<b.y;}
int main(){
int T;cin>>T;
while(T--){
cin>>n;
for(int i=1;i<=n;i++)cin>>s[i].x>>s[i].y,s[i].i=i;
sort(s+1,s+1+n,cmp1);
sort(s+1,s+1+n/2,cmp2);sort(s+n/2+1,s+n+1,cmp2);
for(int i=1;i<=n/2;i++){
cout<<s[i].i<<" "<<s[n-i+1].i<<"\n";
}
}
return 0;
}
但是为什么呢,这么写的原理是什么