思路:两边平方化简一下可以发现 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;
}

本文介绍了一种计算平面直角坐标系中特定条件下线段数量的方法。通过使用C++标准库中的map来记录各点及水平垂直线段的数量,并通过公式计算得出最终结果。该方法考虑了重复点的情况并进行了相应的修正。
177

被折叠的 条评论
为什么被折叠?



