思路:两边平方化简一下可以发现 x1==x2或者y1==y2时成立 算有多少个组合 就是算组合数 1+2+3......+n同时要减去相同的点的组合数 例如有2个(1,2) 3个(2,2)就要减去 (1 )+(2+1) 前者是(1,2)的重复数,后者是(2,2)的重复数
使用map可以很方便快捷地码完 其中cnt要用long long
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
scanf("%d",&n);
map<pair<int,int>,int >s;
map<int ,int > nx,ny;
long long cnt=0;
for(int i=1;i<=n;i++){
int x,y;
cin>>x>>y;
cnt+=nx[x]++ + ny[y]++-s[make_pair(x,y)]++;
}
cout<<cnt<<endl;
return 0;
}