Pagini recente » Cod sursa (job #933882) | Cod sursa (job #282066) | Cod sursa (job #721896) | Cod sursa (job #713430) | Cod sursa (job #1033595)
#include <cstdio>
#include <cstring>
#include <fstream>
#include <vector>
#include <algorithm>
#include <queue>
#define f first
#define s second
#define mp make_pair
using namespace std;
int neg(pair<int, int> x){
if(x.s < 0 && x.f > 0)
return 1;
if(x.s > 0 && x.f < 0)
return 1;
return 0;
}
int cmp(pair<int, int> x, pair<int, int> y){
if(x.s == 0)
return 1;
if(y.s == 0)
return 0;
if(neg(x) && !neg(y))
return 1;
if(neg(y) && !neg(x))
return 0;
return (long long)x.f * y.s < (long long)y.f * x.s;
}
int eq(pair<int, int> x, pair<int, int> y){
if(x.s == 0 && y.s == 0)
return 1;
if(x.s == 0 || y.s == 0)
return 0;
return (long long)x.f * y.s == (long long)y.f * x.s;
}
int main(){
ifstream in("trapez.in");
ofstream out("trapez.out");
vector<pair<int, int> > gv, srt;
int n;
in >> n;
for(int i = 1; i <= n; ++i){
pair<int, int> x;
in >> x.f >> x.s;
gv.push_back(x);
}
for(int i = 0; i < gv.size(); ++i)
for(int j = i + 1; j < gv.size(); ++j)
srt.push_back(mp(gv[i].s - gv[j].s, gv[i].f - gv[j].f));
sort(srt.begin(), srt.end(), cmp);
int evil = 1;
long long ans = 0;
for(int i = 1; i < srt.size(); ++i)
if(eq(srt[i], srt[i - 1])){
++evil;
}
else{
ans = ans + (long long)evil * (evil - 1) / 2;
evil = 1;
}
if(evil)
ans = ans + (long long)evil * (evil - 1) / 2;
out << ans;
return 0;
}