Pagini recente » Cod sursa (job #2730902) | Cod sursa (job #795695) | Cod sursa (job #1941459) | Cod sursa (job #614141) | Cod sursa (job #1021167)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f ("triang.in"); ofstream g ("triang.out");
double eps=0.001, si=1.7320508/2, co=0.5;
int n,nr;
struct punct {double x,y;} a[1501];
inline double abss (double a) {return a<0 ? a*-1.0 : a;}
inline bool egal(double a, double b) {return abss(a-b)<eps;}
//inline bool mic(double a, double b) {return a-b<eps;}
inline bool mic(double a, double b) {return a+eps<b;}
inline bool cmp(punct a, punct b)
{ if(egal(a.x,b.x)) return mic(a.y,b.y);
return mic(a.x,b.x);
}
inline punct p1(punct a, punct b)
{ punct c;
c.x=a.x+(b.x-a.x)*co-(b.y-a.y)*si;
c.y=a.y+(b.x-a.x)*si+(b.y-a.y)*co;
return c;
}
inline punct p2 (punct a, punct b)
{ punct c;
c.x=a.x+(b.x-a.x)*co+(b.y-a.y)*si;
c.y=a.y-(b.x-a.x)*si+(b.y-a.y)*co;
return c;
}
inline int bs (punct c, int j)
{ int i,cnt=(1<<11);
for(i=j;cnt;cnt>>=1)
{ int aux=i+cnt;
if(aux<=n)
if(mic(a[aux].x,c.x) || (egal(a[aux].x,c.x) && mic(a[aux].y,c.y))) i=aux;
}
return (egal(c.x,a[i].x) && egal(c.y,a[i].y) ? 1 : 0);
}
int main ()
{ f>>n;
for(int i=1;i<=n;++i) f>>a[i].x>>a[i].y;
sort(a+1,a+n+1,cmp);
for(int i=1;i<n-1;++i)
for(int j=i+1;j<n;++j)
{ if(bs(p1(a[i],a[j]),j+1)) ++nr;
if(bs(p2(a[i],a[j]),j+1)) ++nr;
}
g<<nr<<'\n'; g.close (); return 0;
}