Pagini recente » Cod sursa (job #589799) | Cod sursa (job #1416373) | Cod sursa (job #2888228) | Cod sursa (job #1368070) | Cod sursa (job #1809952)
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream fin("patrate3.in");
ofstream fout("patrate3.out");
struct a
{
double abs;
double ord;
}
coord[1001];
bool comparare(a lhs, a rhs){return lhs.abs<rhs.abs;}
bool comparare2(a lhs, a rhs){return lhs.ord<rhs.ord;}
int i,n,st,dr,mij,patrate,j,gasit;
double abs1,ord1,abs2,ord2,dx,dy,mijx,mijy;
int main()
{
fin>>n;
for(i=1;i<=n;i++)
fin>>coord[i].abs>>coord[i].ord;
sort(coord+1,coord+n+1,comparare2);
sort(coord+1,coord+n+1,comparare);
for(i=1;i<=n;i++)
{
coord[i].abs*=100000;
coord[i].ord*=100000;
}
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
{
gasit=0;
mijx=(coord[i].abs+coord[j].abs)/2;
mijy=(coord[i].ord+coord[j].ord)/2;
dx=abs(mijx-coord[i].abs);
dy=abs(mijy-coord[i].ord);
if(coord[i].ord<coord[j].ord)
{abs1=mijx+dy;
ord1=mijy-dx;
abs2=mijx-dy;
ord2=mijy+dx;}
else
{
abs1=mijx-dy;
ord1=mijy-dx;
abs2=mijx+dy;
ord2=mijy+dx;
}
st=1;dr=n;
while(st<=dr && gasit==0)
{
mij=(st+dr)/2;
if(abs1==coord[mij].abs&&ord1==coord[mij].ord)
gasit=1;
else
if(abs1>coord[mij].abs)
st=mij+1;
else
dr=mij-1;
}
if(gasit!=0)
{
st=1;dr=n;
while(st<=dr && gasit==1)
{
mij=(st+dr)/2;
if(abs2==coord[mij].abs&&ord2==coord[mij].ord)
gasit=2;
else
if(abs2>coord[mij].abs)
st=mij+1;
else
dr=mij-1;
}
}
if(gasit==2)
patrate++;
}
fout<<patrate;
return 0;
}