Pagini recente » Cod sursa (job #2510355) | Istoria paginii utilizator/szaszihun | Cod sursa (job #1867243) | Istoria paginii runda/kidsim2 | Cod sursa (job #735859)
Cod sursa(job #735859)
#include<iostream>
#include<fstream>
#include<math.h>
#include<algorithm>
using namespace std;
struct patrat {
double d;
short p1,p2;
};
struct punct {
double x,y;
};
patrat v[1000001];
punct a[1001];
inline bool cmp(const patrat a, const patrat b) {
return a.d<b.d;
}
inline int cauta(int p, int n, patrat x)
{
int i,pd,pd1,pd2,q,mij;
q=n;
while (p<=q) {
mij=(p+q)/2;
if(v[mij].d>x.d)
q=mij-1;
else if(v[mij].d<x.d)
p=mij+1;
else break;
}
if(p>q)
return 0;
pd=0;
pd1=0;
pd2=0;
i=p;
while((v[i].d==x.d)&&(i<=n)) {
if(x.d==v[i].d) {
if((x.p1!=v[i].p1)&&(x.p1!=v[i].p2)&&(x.p2!=v[i].p1)&&(x.p2!=v[i].p2))
pd++;
else if((x.p1!=v[i].p1)&&(x.p1!=v[i].p2)&&((x.p2==v[i].p2)||(x.p2==v[i].p1)))
pd2++;
else if((x.p2!=v[i].p1)&&(x.p2!=v[i].p2)&&((x.p1==v[i].p2)||(x.p1=v[i].p1)))
pd1++;
}
i++;
}
if((pd>=2)&&(pd2>=2)&&(pd1>=2))
return 2;
if((pd>=1)&&(pd2>=1)&&(pd1>=1))
return 1;
return 0;
}
int main ()
{
int n,i,j,nr,l;
patrat x;
ifstream f("patrate3.in");
ofstream g("patrate3.out");
f>>n;
for(i=1;i<=n;i++)
f>>a[i].x>>a[i].y;
f.close();
l=0;
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++) {
l++;
v[l].d=(float)sqrt((float)(a[i].x-a[j].x)*(a[i].x-a[j].x)+(float)(a[i].y-a[j].y)*(a[i].y-a[j].y));
v[l].p1=i;
v[l].p2=j;
}
sort(v+1,v+l+1,cmp);
nr=0;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++) {
x.d=(float)sqrt((float)(a[i].x-a[j].x)*(a[i].x-a[j].x)+(float)(a[i].y-a[j].y)*(a[i].y-a[j].y));
x.p1=i;
x.p2=j;
nr=nr+cauta(1,l,x);
}
g<<nr/4;
g.close();
return 0;
}