Pagini recente » Cod sursa (job #2229132) | Cod sursa (job #708816) | Cod sursa (job #1967255) | Cod sursa (job #2111080) | Cod sursa (job #1813694)
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream fin("patrate3.in");
ofstream fout("patrate3.out");
struct a
{
float absc;
float ord;
}
coord[1005];
bool comparare(a lhs, a rhs){return lhs.absc<rhs.absc;}
bool comparare2(a lhs, a rhs){return lhs.ord<rhs.ord;}
int i,n,st,dr,mij,patrate,j,gasit;
float absc1,ord1,absc2,ord2,dx,dy,mijx,mijy;
int main()
{
fin>>n;
for(i=1;i<=n;i++)
fin>>coord[i].absc>>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].absc*=10000;
coord[i].ord*=10000;
}
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
{
gasit=0;
mijx=(coord[i].absc+coord[j].absc)/2;
mijy=(coord[i].ord+coord[j].ord)/2;
dx=abs(mijx-coord[i].absc);
dy=abs(mijy-coord[i].ord);
if(coord[i].ord<coord[j].ord)
{absc1=mijx+dy;
ord1=mijy-dx;
absc2=mijx-dy;
ord2=mijy+dx;}
else
{
absc1=mijx-dy;
ord1=mijy-dx;
absc2=mijx+dy;
ord2=mijy+dx;
}
st=1;dr=n;
while(st<=dr && gasit==0)
{
mij=(st+dr)/2;
if(absc1==coord[mij].absc&&ord1==coord[mij].ord)
gasit=1;
else
{if(absc1>coord[mij].absc)
st=mij+1;
if(absc1<coord[mij].absc)
dr=mij-1;
if(absc1==coord[mij].absc)
{if(ord1>coord[mij].absc)
st=mij+1;
else
dr=mij-1;}}
}
if(gasit==1)
{
st=1;dr=n;
while(st<=dr && gasit==1)
{
mij=(st+dr)/2;
if(absc2==coord[mij].absc&&ord2==coord[mij].ord)
gasit=2;
else
{if(absc2>coord[mij].absc)
st=mij+1;
if(absc2<coord[mij].absc)
dr=mij-1;
if(absc2==coord[mij].absc)
{if(ord2>coord[mij].ord)
st=mij+1;
else
dr=mij-1;}}
}
}
if(gasit==2)
{
patrate++;}
}
fout<<patrate;
return 0;
}