Pagini recente » Cod sursa (job #2427973) | Cod sursa (job #267696) | Cod sursa (job #2880493) | Cod sursa (job #1705078) | Cod sursa (job #2876298)
#include <fstream>
#include <map>
#define NMAX 1000
using namespace std;
ifstream cin ("trapez.in");
ofstream cout ("trapez.out");
map <pair<int, int>, int> mp;
pair <int, int> v[NMAX + 1];
int fcmmdc(int a, int b) {
int r;
a = a < 0 ? -a : a;
b = b < 0 ? -b : b;
while (b > 0) {
r = a % b;
a = b;
b = r;
}
return a;
}
int main() {
int n, i, j, sol, a, b, gcd, val;
cin >> n;
for (i = 0; i < n; i++)
cin >> v[i].first >> v[i].second;
sol = 0;
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
a = v[i].second - v[j].second;
b = v[i].first - v[j].first;
gcd = fcmmdc(a, b);
a /= gcd;
b /= gcd;
auto it = mp.find({a, b});
if (it != mp.end()) {
it->second++;
val = it->second;
sol -= (val - 1) * (val - 2) / 2;
sol += val * (val - 1) / 2;
}
else
mp.insert({{a, b}, 1});
}
}
cout << sol;
return 0;
}