Pagini recente » Cod sursa (job #2697633) | Cod sursa (job #847835) | Cod sursa (job #3520) | Cod sursa (job #22794) | Cod sursa (job #770624)
Cod sursa(job #770624)
#include<iostream>
#include<fstream>
#include<vector>
#include<math.h>
#include<complex>
using namespace std;
#define mod 5741
#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;
}
complex <double> inmultire(complex <double> a, complex <double> b)
{
complex <double> c;
real(c)=(double)(real(a)*real(b)-imag(a)*imag(b));
imag(c)=(double)(real(a)*imag(b)+imag(a)*real(b));
return c;
}
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=-inmultire(a,ep)-inmultire(b,inmultire(ep,ep));
x.x=real(c);
x.y=imag(c);
nr=nr+cauta(x);
c=-inmultire(b,ep)-inmultire(a,inmultire(ep,ep));
x.x=real(c);
x.y=imag(c);
nr=nr+cauta(x);
}
g<<nr/3;
g.close();
return 0;
}