Cod sursa(job #2177508)

Utilizator DimaTCDima Trubca DimaTC Data 18 martie 2018 17:18:07
Problema Patrate 3 Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;

const double e = 1e-4;


pair<double, double>a[1010];
int n,k,rs;
double y3,x3,y4,x4;

int main() {
	ifstream cin("patrate3.in");
	ofstream cout("patrate3.out");
	cin>>n;
	
	for (int i=1; i<=n; i++) {
		cin>>a[i].x>>a[i].y;
	}
	sort(a+1,a+1+n);
	
	for (int i=1; i<=n; i++) {
		for (int j=i+1; j<=n-2; j++) {
			if (a[j].y>a[i].y) y3=a[i].y-(a[j].x-a[i].x), y4=a[j].y-(a[j].x-a[i].x), x3=a[i].x+a[j].y-a[i].y, x4=a[j].x+a[j].y-a[i].y;
			else  y3=a[i].y+(a[j].x-a[i].x), y4=a[j].y+(a[j].x-a[i].x), x3=a[i].x-(a[j].y-a[i].y), x4=a[j].x-(a[j].y-a[i].y);
			
			int st=j+1, dr=n,mid; bool u=0;
			while (st<=dr) {
				mid=(st+dr)/2;
				if (abs(a[mid].x-x3)<e && abs(a[mid].y-y3)<e) {
					u=1; break;
				}
				if (a[mid].x<x3 || abs(a[mid].x-x3)<e && a[mid].y<y3) st=mid+1;
				else dr=mid-1;
			}
			if (!u) continue;
			
			st=j+1, dr=n,mid; u=0;
			while (st<=dr) {
				mid=(st+dr)/2;
				if (abs(a[mid].x-x4)<e && abs(a[mid].y-y4)<e) {
					u=1; break;
				}
				if (a[mid].x<x4 || abs(a[mid].x-x4)<e && a[mid].y<y4) st=mid+1;
				else dr=mid-1;
			}
			if (u) rs++;
		}
	}
	cout<<rs;
	
	return 0;
}