Cod sursa(job #2590046)
Utilizator | Data | 27 martie 2020 13:26:41 | |
---|---|---|---|
Problema | Patrate 3 | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 4.2 kb |
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream fin ("patrate3.in");
ofstream fout ("patrate3.out");
struct ura
{
double x,y;
};
ura v[1001];
bool cmp(ura x,ura y)
{
if(fabs(x.x-y.x)<=0.0001)
{
if(x.y-y.y>0.0001)
return false;
else
return true;
}
else
if(x.x-y.x>0.0001)
return false;
else
return true;
}
int main()
{
ura c,d;
double x,y;
int n,i,r=0,j,l1,st,dr,m,l2;
fin>>n;
for(i=1;i<=n;i++)
fin>>v[i].x>>v[i].y;
sort(v+1,v+n+1,cmp);
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
x=v[j].x-v[i].x;
y=v[j].y-v[i].y;
c.x=v[j].x+y;
c.y=v[j].y-x;
l1=0;
st=1;
dr=n;
while(st<=dr)
{
m=(st+dr)/2;
if(v[m].x-c.x<-0.0001)
st=m+1;
else
if(v[m].x-c.x>0.0001)
dr=m-1;
else
if(v[m].y-c.y<-0.0001)
st=m+1;
else
if(v[m].y-c.y>0.0001)
dr=m-1;
else
{
l1=1;
st=dr+1;
}
}
l2=0;
if(l1==1)
{
d.x=v[i].x+y;
d.y=v[i].y-x;
st=1;
dr=n;
while(st<=dr)
{
m=(st+dr)/2;
if(v[m].x-d.x<-0.0001)
st=m+1;
else
if(v[m].x-d.x>0.0001)
dr=m-1;
else
if(v[m].y-d.y<-0.0001)
st=m+1;
else
if(v[m].y-d.y>0.0001)
dr=m-1;
else
{
l2=1;
st=dr+1;
}
}
}
r=r+l1*l2;
l1=0;
l2=0;
c.x=v[j].x-y;
c.y=v[j].y+x;
st=1;
dr=n;
l1=0;
while(st<=dr)
{
m=(st+dr)/2;
if(v[m].x-c.x<-0.0001)
st=m+1;
else
if(v[m].x-c.x>0.0001)
dr=m-1;
else
if(v[m].y-c.y<-0.0001)
st=m+1;
else
if(v[m].y-c.y>0.0001)
dr=m-1;
else
{
l1=1;
st=dr+1;
}
}
d.x=v[i].x-y;
d.y=v[i].y+x;
l2=0;
if(l1==1)
{
st=1;
dr=n;
while(st<=dr)
{
m=(st+dr)/2;
if(v[m].x-d.x<-0.0001)
st=m+1;
else
if(v[m].x-d.x>0.0001)
dr=m-1;
else
if(v[m].y-d.y<-0.0001)
st=m+1;
else
if(v[m].y-d.y>0.0001)
dr=m-1;
else
{
l2=1;
st=dr+1;
}
}
r=r+l1*l2;
}
}
}
fout<<r/4;
return 0;
}