Pagini recente » Rating Enache-Stratulat Marius (fratele_merius) | Cod sursa (job #2877046) | Cod sursa (job #3215872) | Cod sursa (job #1620874) | Cod sursa (job #1488083)
#include <cstdio>
#include <algorithm>
#include <cmath>
#define maxN 1502
#define e 0.001
#define cosA 0.5000
#define sinA 0.8660254
using namespace std;
struct point
{
double x,y;
} v[maxN];
int i, n, j;
long long sol;
int cmp(const point a, const point b)
{
if (a.x == b.x)
return a.y < b.y;
return a.x < b.x;
}
int bs (int left, int right, double c, double d)
{
int mid = (left + right) / 2;
if(left > right)
return 0;
if(fabs(c - v[mid].x) < e && fabs(d - v[mid].y) < e)
return 1;
if (v[mid].x < c)
return bs(mid + 1, right, c, d);
return bs(left, mid - 1, c, d);
}
void read()
{
freopen("triang.in","r",stdin);
scanf("%d", &n);
for(i = 1; i <= n; ++ i)
scanf("%lf %lf", &v[i].x, &v[i].y);
}
void solve()
{
point p;
sort(v + 1,v + n + 1, cmp);
for (i = 1; i < n - 1; ++ i)
for (j = i + 1; j < n; ++ j)
{
p.x = (v[i].x + v[j].x) * cosA + (v[i].y - v[j].y) * sinA;
p.y = (v[j].x - v[i].x) * sinA + (v[i].y + v[j].y) * cosA;
sol += bs(j + 1, n, p.x, p.y);
p.x = (v[i].x + v[j].x) * cosA + (v[j].y - v[i].y) * sinA;
p.y = (v[i].x - v[j].x) * sinA + (v[i].y + v[j].y) * cosA;
sol += bs(j + 1, n, p.x, p.y);
}
}
void write()
{
freopen("triang.out","w",stdout);
printf("%lld",sol);
}
int main()
{
read();
solve();
write();
return 0;
}