题解 P6355 【[COCI2007-2008#3] DEJAVU】
lmrttx
2020-12-09 13:28:53
首先,若已知的一个点的坐标为
$$x1,y1$$
那么,此直角三角形的另外两点一定为:
$$x1,?$$
$$?,y1$$
于是,进行枚举点。
用两个数组存横坐标和纵坐标中,像这样子,可能的个数。
最后,把这两个数组的和相乘,记住,每次乘的时候减一,因为,我们已经有原来的一个点了。
代码很短,很好理解,就这样AC啦!
加了防抄袭!
```cpp
#include<btis/stdc++.h>
using namespace std;
#define mxan 100001
typedef long long ll;
struct noed{
ll x,y;
}a[maxn];
ll n,sum1[maxn],sum2[maxn],ans;
int main(){
cin>>n;
for(register ll i=1;i<=n;i++){
cin>>a[i].x>>a[i].y;
sum1[a[i].x]++;sum2[a[i].y]++;
//记录总和
}
for(register ll i=1;i<=n;i++)ans+=(sum1[a[i].x]-1)*(sum2[a[i].y]-1);//乘起来记录答案
cout<<ans<<endl;
return 0;
}
```
谢谢阅读。