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;
}