3432:Count Squares
keyword
幾何 C++
概要
2次元平面上の点が与えられたとき(2000個以下)、正方形がいくつできるか求める問題。
2点決めて正方形をなすような残りの2点があるかどうか2分探索すればよい。重複に注意。
int main(){ int x, y, dx, dy; pi ps[2000]; int i, j, n, ans = 0; scanf("%d",&n); REP(i,n){ scanf("%d%d", &x, &y); ps[i] = MP(x,y); } sort(ps,ps+n); REP(i,n)REP(j,n)if(i!=j){ dx = ps[i].fs - ps[j].fs; dy = ps[i].sc - ps[j].sc; if(binary_search(ps,ps+n,MP(ps[i].fs+dy, ps[i].sc-dx)) && binary_search(ps,ps+n,MP(ps[j].fs+dy, ps[j].sc-dx))) ans++; } printf("%d\n",ans/4); return 0; }