Pagini recente » Cod sursa (job #1989002) | Cod sursa (job #1471823) | Cod sursa (job #2090452) | Cod sursa (job #2769654) | Cod sursa (job #2123382)
#include <fstream>
#include <cmath>
#include <algorithm>
using namespace std;
ifstream f("triang.in");
ofstream g("triang.out");
struct punct
{
double x,y;
}v[3001];
int compare (punct A,punct B)
{
if(A.x==B.x)return (A.y<B.y);
return (A.x<B.x);
}
int n,i,p,u,mij,nr,j;
double x1,x2,yy1,r=sqrt(3),y2;
int main()
{
f>>n;
for(i=1;i<=n;i++)
{
f>>v[i].x>>v[i].y;
}
sort(v+1,v+n+1,compare);
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++)
{
x1=(v[i].x+v[j].x)/2+r/2*(v[j].y-v[i].y);
yy1=(v[i].y+v[j].y)/2+r/2*(v[i].x-v[j].x);
x2=(v[i].x+v[j].x)/2+r/2*(v[i].y-v[j].y);
y2=(v[i].y+v[j].y)/2+r/2*(v[j].x-v[i].x);
p=j+1;u=n;
while(p<=u)
{
mij=(p+u)/2;
if(fabs(v[mij].x-x1)<=0.0001)
{
if(fabs(v[mij].y-yy1)<=0.0001){nr++;break;}
else if(v[mij].y<yy1){p=mij+1;}
else {u=mij-1;}
}
else if(v[mij].x<x1){p=mij+1;}
else {u=mij-1;}
}
p=j+1;u=n;
while(p<=u)
{
mij=(p+u)/2;
if(fabs(v[mij].x-x2)<=0.0001)
{
if(fabs(v[mij].y-y2)<=0.0001){nr++;break;}
else if(v[mij].y<y2){p=mij+1;}
else {u=mij-1;}
}
else if(v[mij].x<x2){p=mij+1;}
else {u=mij-1;}
}
}
}
g<<nr;
return 0;
}