Pagini recente » Cod sursa (job #2398216) | Cod sursa (job #1912495) | Cod sursa (job #1489560) | Cod sursa (job #2089033) | Cod sursa (job #770606)
Cod sursa(job #770606)
#include<iostream>
#include<fstream>
#include<vector>
#include<math.h>
#include<complex>
using namespace std;
#define mod 3001
#define A 0.6180339887
#define eps 0.001
struct punct {
double x,y;
};
punct aa[1501];
vector <punct> v[mod];
inline void adauga(punct x)
{
int k;
double h;
h=A*(x.x);
h=(double)h-floor(h);
k=abs(h*mod);
v[k].push_back(x);
}
inline int egal(double x, double y)
{
if(fabs(x-y)<=eps)
return 1;
return 0;
}
inline int cauta(punct x)
{
int k,nr;
double h;
h=A*(x.x);
h=(double)h-floor(h);
k=abs(h*mod);
nr=0;
for(vector <punct> :: iterator it=v[k].begin();it!=v[k].end();it++)
if(egal(x.x,it->x) && egal(x.y,it->y))
nr++;
return nr;
}
int main ()
{
int i,j,n,nr;
complex <double> a,b,c,ep(-cos(M_PI/3),sin(M_PI/3));
punct x;
ifstream f("triang.in");
ofstream g("triang.out");
f>>n;
for(i=1;i<=n;i++) {
f>>aa[i].x>>aa[i].y;
adauga(aa[i]);
}
f.close();
nr=0;
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++) {
a=complex <double> (aa[i].x,aa[i].y);
b=complex <double> (aa[j].x,aa[j].y);
c=-a*ep-b*ep*ep;
x.x=real(c);
x.y=imag(c);
nr=nr+cauta(x);
c=-b*ep-a*ep*ep;
x.x=real(c);
x.y=imag(c);
nr=nr+cauta(x);
}
g<<nr/3;
g.close();
return 0;
}