Pagini recente » Cod sursa (job #1875484) | Cod sursa (job #919764) | Cod sursa (job #1855188) | Cod sursa (job #865136) | Cod sursa (job #1447301)
#include <iostream>
#include <fstream>
#include <utility>
#include <algorithm>
using namespace std;
ifstream fin("trapez.in");
ofstream fout("trapez.out");
const int NMax = 1005;
const int INF = 1e9;
const double eror = 1e-14;
pair < int, int > v[NMax];
double p[NMax * NMax];
inline double get_pant(const pair < int, int > &A, const pair < int, int > &B){
if(A.first == B.first){
return INF;
} else {
return ((double)(B.second - A.second) / (double)(B.first - A.first));
}
}
inline double modul(double x){
return max(x, -x);
}
int main()
{
int n, x, y, k, l;
long long int ans = 0;
fin >> n;
for(int i = 1; i <= n; i++){
fin >> x >> y;
v[i] = make_pair(x, y);
}
k = 0;
for(int i = 1; i < n; i++){
for(int j = i + 1; j <= n; j++){
p[++k] = get_pant(v[i], v[j]);
}
}
sort(p + 1, p + k + 1);
l = 1;
for(int i = 2; i <= k; i++){
if(modul((p[i - 1] - p[i])) < eror){
l++;
} else {
ans += 1LL * l * (l - 1) / 2;
l = 1;
}
}
ans += 1LL * l * (l - 1) / 2;
fout << ans;
return 0;
}