AOJ_0518 The Oldest Site
問題
解法
2点を選んで1つの辺を作る.
その辺が正方形をつくっているか調べるといい.
#include <cstdio> #include <algorithm> using namespace std; const int MAX_HW = 5001; bool iseki[MAX_HW][MAX_HW]; int x[3000], y[3000]; int main(){ int n; while(scanf("%d", &n) && n){ for(int i = 0; i < MAX_HW; i++) for(int j = 0; j < MAX_HW; j++) iseki[i][j] = false; for(int i = 0; i < n; i++){ scanf("%d %d", &x[i], &y[i]); iseki[x[i]][y[i]] = true; } int ans = 0; for(int i = 0; i < n; i++){ for(int j = i + 1; j < n; j++){ int dx = x[i] - x[j]; int dy = y[i] - y[j]; if(x[i] - dy < 0 || MAX_HW <= x[i] - dy || y[i] + dx < 0 || MAX_HW <= y[i] + dx || x[j] - dy < 0 || MAX_HW <= x[j] - dy || y[j] + dx < 0 || MAX_HW <= y[j] + dx ){ continue;} if(iseki[x[i] - dy][y[i] + dx] && iseki[x[j] - dy][y[j] + dx]){ ans = max(ans, dx * dx + dy * dy); } } } printf("%d\n", ans); } return 0; }