문제

링크

풀이

#include <stdio.h>
 
typedef struct Coord {
  long long x;
  long long y;
} Coord;
 
int n, a[3];
Coord p[1500];
 
int triangle(Coord a, Coord b, Coord c) {
  long long ab = (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y);
  long long bc = (b.x-c.x)*(b.x-c.x) + (b.y-c.y)*(b.y-c.y);
  long long ca = (c.x-a.x)*(c.x-a.x) + (c.y-a.y)*(c.y-a.y);
 
  if (ab >= bc && ab >= ca && ab == bc+ca) return 1;
  if (bc >= ab && bc >= ca && bc == ab+ca) return 1;
  if (ca >= ab && ca >= bc && ca == ab+bc) return 1;
  return 0;
}
 
int solve(int idx) {
  if (idx == 3) {
    return triangle(p[a[0]], p[a[1]], p[a[2]]);
  }
 
  int count = 0;
  if (idx == 0) {
    for (int i=0; i<n; i++) {
      a[idx] = i;
      count += solve(idx+1);
    }
  } else {
    for (int i=a[idx-1]+1; i<n; i++) {
      a[idx] = i;
      count += solve(idx+1);
    }
  }
  return count;
}
 
int main(void) {
  scanf("%d", &n);
  for (int i=0; i<n; i++) {
    scanf("%lld %lld", &p[i].x, &p[i].y);
  }
 
  printf("%d", solve(0));
  return 0;
}