Pagini recente » Cod sursa (job #1125918) | Cod sursa (job #298507) | Cod sursa (job #2120940) | Cod sursa (job #2802307) | Cod sursa (job #406722)
Cod sursa(job #406722)
# include <fstream>
# include <iostream>
# include <algorithm>
# include <cmath>
# define EPS 0.001
using namespace std;
struct pct {
double x, y;
friend bool operator < (const pct &a, const pct &b)
{
if (a.x<b.x || (abs(a.x-b.x)<=1e-3 && a.y<b.y))
return 1;
return 0;
};
};
int n;
long long int sol;
pct v[1503];
void read ()
{
ifstream fin ("triang.in");
fin>>n;
for (int i=1;i<=n;i++)
fin>>v[i].x>>v[i].y;
}
int cmp (pct a, pct b)
{
if (a.x+EPS<b.x)
return -1;
if (a.x-b.x>-EPS && a.x-b.x<EPS && a.y+EPS<b.y)
return -1;
if (a.x-b.x>-EPS && a.x-b.x<EPS && a.y-b.y>-EPS && a.y-b.y<EPS)
return 0;
return 1;
}
int cauta (int st, int dr, pct p)
{
if (st>dr)
return 0;
if (st==dr)
{
if (cmp(v[st], p)==0)
return 1;
return 0;
}
int m=(st+dr)/2;
if (cmp(v[m],p)==0)
return 1;
if (cmp(p, v[m])==-1)
return cauta (st, m-1, p);
return cauta (m+1, dr, p);
}
void solve ()
{
pct p1, p2;
for (int i=1;i<n;i++)
for (int j=i+1;j<=n;j++)
{
p1.x=cos(3.1415927/3)*(v[j].x-v[i].x)-sin(3.1415/3)*(v[j].y-v[i].y)+v[i].x;
p1.y=sin(3.1415/3)*(v[j].x-v[i].x)+cos(3.1415/3)*(v[j].y-v[i].y)+v[i].y;
p2.x=cos(3.1415/3)*(v[i].x-v[j].x)-sin(3.1415/3)*(v[i].y-v[j].y)+v[j].x;
p2.y=sin(3.1415/3)*(v[i].x-v[j].x)+cos(3.1415/3)*(v[i].y-v[j].y)+v[j].y;
if(cauta(1, n, p1))
sol++;
if(cauta(1, n, p2))
sol++;
}
}
int main ()
{
read ();
sort (v+1, v+n+1);
solve ();
ofstream fout ("triang.out");
fout<<sol/3;
return 0;
}