题解 P6355 【[COCI2007-2008#3] DEJAVU】

lmrttx

2020-12-09 13:28:53

Solution

首先,若已知的一个点的坐标为 $$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; } ``` 谢谢阅读。