Pagini recente » Rating Eva Maria Simpetru (eva_simpetru) | Cod sursa (job #2861683) | Cod sursa (job #1201331) | Cod sursa (job #488482) | Cod sursa (job #32476)
Cod sursa(job #32476)
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
#define Nmax 1024
#define mp make_pair
#define x first
#define y second
int n, ct;
pair<int, int> punct[Nmax];
pair<int, int> d[Nmax * Nmax];
void citire()
{
int i;
scanf("%d\n", &n);
for (i = 1; i <= n; ++i)
scanf("%d %d\n", &punct[i].x, &punct[i].y);
}
int cmp(const pair<int, int> a, const pair<int, int> b)
{
long long p1, p2;
p1 = a.x; p1 *= b.y;
p2 = a.y; p2 *= b.x;
return p1 < p2;
}
int cmp2(const pair<int, int> a, const pair<int, int> b)
{
long long p1, p2;
p1 = a.x; p1 *= b.y;
p2 = a.y; p2 *= b.x;
return p1 == p2;
}
void solve()
{
int i, j, st, dr, mij, v1 = 0, v2 = 0, sol = 0;
for (i = 1; i <= n; ++i)
for (j = i+1; j <= n; ++j)
d[++ct] = mp(punct[i].y - punct[j].y, punct[i].x - punct[j].x);
sort(d+1, d+ct+1, cmp);
//for (i = 1; i <= ct; ++i)
// printf("%lf\n", double(d[i].x) / d[i].y);
for (i = 1; i <= ct; ++i)
{
st = 1; dr = ct;
while (st <= dr)
{
mij = (st + dr) >> 1;
if (!cmp(d[mij], d[i]))
{
v1 = mij;
dr = mij - 1;
}
else
st = mij + 1;
}
st = 1; dr = ct;
while (st <= dr)
{
mij = (st + dr) >> 1;
if (cmp(d[mij], d[i]) || cmp2(d[mij], d[i]))
{
v2 = mij;
st = mij + 1;
}
else
dr = mij - 1;
}
sol += v2 - v1 + 1;
//printf("%d %d %d\n", i, v1, v2);
}
sol -= ct;
sol /= 2;
printf("%d\n", sol);
}
int main()
{
freopen("trapez.in", "r", stdin);
freopen("trapez.out", "w", stdout);
citire();
solve();
return 0;
}