Pagini recente » Cod sursa (job #1382853) | Cod sursa (job #1775427) | Cod sursa (job #1808454) | Cod sursa (job #405058) | Cod sursa (job #2734974)
#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;
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(abs(frac.first), abs(frac.second));
frac.first /= cm;
frac.second /= cm;
pante.emplace_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 += (long long) (j - i) * (j - i - 1) / 2;
}
g << sol;
return 0;
}