Pagini recente » Cod sursa (job #334300) | Cod sursa (job #347271) | Cod sursa (job #1396506) | Cod sursa (job #1467231) | Cod sursa (job #2734938)
#include <fstream>
#include<map>
using namespace std;
ifstream f("trapez.in");
ofstream g("trapez.out");
map<pair<int, int>, int> fr;
int n;
pair<int, int> puncte[1005];
int cmmdc(int a, int b) {
int r;
while (b) {
r = a % b;
a = b;
b = r;
}
return a;
}
int main() {
f >> n;
for (int i = 0; i < n; ++i) {
f >> puncte[i].first >> puncte[i].second;
for (int j = 0; j < i; ++j) {
pair<int, int> frac;
frac.first = puncte[i].second - puncte[j].second;
frac.second = puncte[i].first - puncte[j].first;
int cm = cmmdc(frac.first, frac.second);
frac.first /= cm;
frac.second /= cm;
if (frac.second < 0) {
frac.first *= -1;
frac.second *= -1;
}
fr[frac]++;
}
}
long long sol = 0;
for (auto nr:fr)
sol += nr.second * (nr.second - 1) / 2;
g << sol;
return 0;
}