JOI2007本選 問題3@C++
だいぶRubyグセも抜けていい感じ。
やっぱり、おととしとか去年に比べて、だいぶ実力がついてきたという実感はある。
今年の本選は2完でボーダーラインぎりぎりみたいなのじゃなくて、むしろ満点を目指す勢いでいきたい。
#include <cstdio> #include <vector> #include <algorithm> using namespace std; int main(int argc, char *argv[], char *envp[]) { #ifdef DEBUG FILE *in = stdin; FILE *out = stdout; #else FILE *in = fopen("input.txt", "r"); FILE *out = fopen("output.txt", "w"); #endif int n; fscanf(in, "%d\n", &n); vector<pair<int,int> > pts(n); for(int i=0;i<n;i++) { fscanf(in, "%d %d\n", &pts[i].first, &pts[i].second); } sort(pts.begin(), pts.end()); int max_siz = 0; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(i==j)continue; pair<int,int> &pt0 = pts[i]; pair<int,int> &pt1 = pts[j]; //if(pt0 != make_pair(2,4) || pt1 != make_pair(5,3))continue; int siz = (pt0.first - pt1.first) * (pt0.first - pt1.first) + (pt0.second - pt1.second) * (pt0.second - pt1.second); //printf("%d\n", siz); if(siz <= max_siz)continue; pair<int,int> pt2( pt0.first - pt0.second + pt1.second, pt0.second + pt0.first - pt1.first); pair<int,int> pt3( pt1.first + pt1.second - pt0.second, pt1.second - pt1.first + pt0.first); //printf("%d, %d\n",pt2.first,pt2.second); //printf("%d, %d\n",pt3.first,pt3.second); if( binary_search(pts.begin(), pts.end(), pt2) && binary_search(pts.begin(), pts.end(), pt3)) { max_siz = siz; } } } fprintf(out, "%d\n", max_siz); fclose(in); fclose(out); return 0; }