May 05, 2020
좌표 평면에 점 N개가 있다. 이때, 빗변을 제외한 나머지 두 변이 좌표축에 평행한 직각삼각형을 이루는 점 3개를 고르는 방법을 수를 구하는 프로그램을 작성하시오. 직각삼각형은 한각이 직각인 삼각형이며, 직각의 대변을 빗변이라고 한다.#include <cstdio>
#include <vector>
using namespace std;
typedef long long ll;
int main (){
ll N;
vector<ll> xcnt(100001, 0);
vector<ll> ycnt(100001, 0);
vector<ll> vx;
vector<ll> vy;
scanf("%lld", &N);
for (int i = 0 ; i < N ; i++){
ll x, y;
scanf("%lld %lld", &x, &y);
vx.push_back(x);
vy.push_back(y);
xcnt[x]++; // 각 좌표의 갯수 세기
ycnt[y]++;
}
ll total = 0;
for (int i = 0 ; i < N ; i++){
ll sum = (xcnt[vx[i]]-1) * (ycnt[vy[i]]-1); // 한 좌표에 대해서 같은 x나 y를 공유하는 다른 좌표들의 갯수 찾기
if (sum < 0) continue;
total += sum;
}
printf("%lld", total);
return 0;
}