#include<cstdio> #include<set> #include<algorithm> using namespace std; const int MAX_N = 3e4; int n, t, x[MAX_N], y[MAX_N]; int main() { scanf("%d", &t); while (t--) { int res = 0; set<pair<int, int> > st; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d %d", x + i, y + i), st.insert({ x[i],y[i] }); for (int i = 0; i < n; i++) { for (int j = i + 1, p, q, r, s; j < n; j++) { p = x[i] + x[j]; q = y[i] + y[j]; r = x[i] - x[j]; s = y[i] - y[j]; if (abs(p - q) & 1) continue; if (st.find({ (p + s) / 2,(q - r) / 2 }) != st.end() && st.find({ (p - s) / 2,(q + r) / 2 }) != st.end()) res = max(res, (r*r + s*s) / 2); } } printf("%d\n", res); } return 0; }
9015번: 정사각형
https://www.acmicpc.net/problem/9015
피드 구독하기:
댓글
(
Atom
)
abs(p - q) & 1 부분은 왜 필요한거죠?
답글삭제격자점을 꼭지점으로 갖는 정사각형은 중심점이 (x,y), (x+0.5,y+0.5) (x,y는 정수)일 수밖에 없습니다.
답글삭제소스에서는 (p/2,q/2)이 정사각형의 중심점을 의미하는데 p-q가 홀수인 경우 중심점이 (x,y+0.5), (x+0.5,y) 꼴이므로 제외할 수 있습니다.
다음 조건문에서 나눗셈 연산을 통해 소수점이 잘려나간 좌표값을 set에서 찾는 것을 방지하려고 미리 제외시켰습니다.