Pagini recente » Cod sursa (job #290395) | Cod sursa (job #2524494) | Cod sursa (job #2974392) | Cod sursa (job #208384) | Cod sursa (job #2734956)
#include <fstream>
#include<vector>
#include<algorithm>
using namespace std;
ifstream f("trapez.in");
ofstream g("trapez.out");
int n;
pair<int, int> puncte[1005];
vector<pair<int, int>> pante;
long long cmmdc(long long a, long long b) {
long long 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<long long, long long> frac;
frac.first = puncte[i].second - puncte[j].second;
frac.second = puncte[i].first - puncte[j].first;
long long cm = cmmdc(frac.first, frac.second);
frac.first /= cm;
frac.second /= cm;
if (frac.second < 0) {
frac.first *= -1;
frac.second *= -1;
}
pante.push_back(frac);
}
}
sort(pante.begin(), pante.end());
long long sol = 0;
int nrp = pante.size();
for (int i = 0; i < nrp; ++i) {
int j;
for (j = i + 1; j < nrp && pante[i] == pante[j]; ++j);
sol += (j - i) * (j - i - 1) / 2;
}
g << sol;
return 0;
}