Pagini recente » Cod sursa (job #151927) | Cod sursa (job #2743998) | Cod sursa (job #466076) | Cod sursa (job #1616405) | Cod sursa (job #1981390)
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
struct point
{
int x,y;
};
point v[1005];
const double infinit = 2000000005;
const double eps = 1.e-14;
vector <double> p;
double panta(point a,point b)
{
if(abs(a.x - b.x) < eps)
return infinit;
else
return (1.0 * b.y - a.y) / (b.x - a.x);
}
int fact(int n)
{
int p = 1;
for(int i = 1;i <= n;i++)
p *= i;
return p;
}
int main()
{
freopen("trapez.in", "r",stdin);
freopen("trapez.out", "w",stdout);
int i,n;
scanf("%d", &n);
for(i = 1;i <= n;i++)
scanf("%d%d", &v[i].x, &v[i].y);
int j;
for(i = 1;i < n;i++)
for(j = i + 1;j <= n;j++)
p.push_back(panta(v[i],v[j]));
sort(p.begin(),p.end());
int f,s = 0;
double m;
m = p[0];
f = 1;
for(i = 1;i < (n * (n - 1)) / 2;i++)
{
if(p[i] > m)
{
s += fact(f) / (2 * fact(f - 2));
m = p[i];
f = 1;
}
else if(p[i] == m)
f++;
}
printf("%d",s);
return 0;
}