Pagini recente » Cod sursa (job #672477) | Cod sursa (job #811182) | Cod sursa (job #396785) | Cod sursa (job #2931280) | Cod sursa (job #524308)
Cod sursa(job #524308)
#include<fstream>
#include<algorithm>
#include<cmath>
using namespace std;
#define eps 0.001
ifstream f("triang.in");
ofstream g("triang.out");
class complex
{ double re,im;
public:
complex() { }
complex(double a,double b) { re=a , im=b; }
void set(double a,double b) { re=a , im=b; }
complex operator +(complex a)
{ complex c; c.re=a.re+re; c.im=a.im+im;
return c;
}
complex operator -(complex a)
{ complex c; c.re=re-a.re , c.im=im-a.im; return c; }
complex operator *(complex a)
{ complex c; c.re=re*a.re-im*a.im; c.im=re*a.im+im*a.re; return c; }
bool operator <(complex a)
{ if(re-a.re<0) return 1;
if(abs(re-a.re)<=eps && im-a.im<0) return 1;
return 0;
}
bool operator >(complex a)
{ if(re-a.re<0) return 0;
if(abs(re-a.re)<=eps && im-a.im<0) return 0;
return 1;
}
bool operator ==(complex a)
{ if(abs(re-a.re)<=eps && abs(im-a.im)<=eps)
return 1;
return 0;
}
};
bool cmp(complex a,complex b)
{ return a<b;
}
complex epsp(0.5,0.86602540378443864676372317075294);
complex epsn(0.5,-0.86602540378443864676372317075294);
int N;
complex af[1501];
bool search(complex x)
{ int left,right,mid;
left=1 , right=N;
while(left<=right)
{ mid=(left+right)>>1;
if(x<af[mid]) right=mid-1;
if(x>af[mid]) left=mid+1;
if(x==af[mid]) return 1;
}
return 0;
}
int main()
{ int i,j,nr=0; double x,y;
f>>N;
for(i=1;i<=N;i++)
{ f>>x>>y;
af[i].set(x,y);
}
sort(af+1,af+N+1,cmp);
for(i=1;i<=N;i++)
for(j=i+1;j<=N;j++)
{ if(search(af[i]+epsp*(af[j]-af[i])))
nr++;
if(search(af[i]+epsn*(af[j]-af[i])))
nr++;
}
g<<nr/3;
f.close();
g.close();
return 0;
}