Cod sursa(job #2156101)

Utilizator ovidius11Stiriu Ovidius ovidius11 Data 8 martie 2018 14:39:05
Problema Patrate 3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<cstdio>
#include<unordered_map>
#include<cmath>
#define eps 1e-5
#define pi 3.1415926535897932384626433832795
using namespace std;
struct point{
double x,y;
}v[1005];
struct mhas{
int operator () (const point &a) const{
int nr=a.x*pi+a.y;
return nr;}
};
struct cmp{
bool operator () (const point &a,const point &b) const{
if (abs(a.x-b.x)<eps && abs(a.y-b.y)<eps)
return 1;
return 0;}
};
unordered_map<point,bool,mhas,cmp>m;
int main(){
freopen("patrate3.in","r",stdin);
freopen("patrate3.out","w",stdout);
int n,i,j,rasp=0;
double dif1,dif2;
point x,y;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%lf%lf",&v[i].x,&v[i].y),m[v[i]]=1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if (i!=j && ((abs(v[i].x-v[j].x)<eps && v[i].y<v[j].y) || (v[i].x<v[j].x && v[i].y<v[j].y))){
dif1=v[j].y-v[i].y;
dif2=v[j].x-v[i].x;
x.x=v[i].x+dif1;
x.y=v[i].y-dif2;
y.x=x.x+dif2;
y.y=x.y+dif1;
if (m.count(x)==1 && m.count(y)==1)
rasp++;}
printf("%d\n",rasp);
return 0;}