Pagini recente » Cod sursa (job #1775004) | Cod sursa (job #2079342) | Cod sursa (job #2950983) | Cod sursa (job #2057036) | Cod sursa (job #2792569)
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <chrono>
FILE *fin, *fout;
const int NMAX = 1e3;
const int INF = 1e9;
int N, ans;
std :: pair <int, int> v[NMAX + 1];
std :: vector <std :: pair <int, int>> p;
std :: pair<int, int> panta(std :: pair <int, int> a, std :: pair <int, int> b) {
int gcd = std :: __gcd((a.second - b.second), (a.first - b.first));
return {(a.second - b.second) / gcd, (a.first - b.first) / gcd};
}
int main() {
fin = fopen("trapez.in", "r");
fout = fopen("trapez.out", "w");
fscanf(fin, "%d", &N);
for(int i = 1; i <= N; i++) {
int x, y;
fscanf(fin, "%d %d", &x, &y);
v[i] = {x, y};
}
for(int i = 1; i <= N; i++) {
for(int j = i + 1; j <= N; j++) {
p.push_back(panta(v[i], v[j]));
}
}
std :: sort(p.begin(), p.end());
int len = 1;
std :: pair<int, int> last = p[0];
for(int i = 1; i < p.size(); i++) {
if(p[i] != last) {
ans += len * (len - 1) >> 1;
len = 1;
last = p[i];
} else {
len++;
}
}
fprintf(fout, "%d", ans);
return 0;
}