Pagini recente » Cod sursa (job #1627007) | Cod sursa (job #2860148) | Cod sursa (job #2680641) | Cod sursa (job #2772393) | Cod sursa (job #3148616)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <deque>
#include <iomanip>
#include <vector>
#pragma GCC optimize("O3")
#define fi first
#define se second
#define pb push_back
#define pf push_front
using namespace std;
ifstream fin ("trapez.in");
ofstream fout ("trapez.out");
typedef long long ll;
const ll Nmax=1e3, inf=2e9+5;
using pll=pair<ll, ll>;
struct point{
ll x, y;
};
int n;
point v[Nmax];
map <pll, int> pant;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
fin>>n;
for (int i=0; i<n; i++)
fin>>v[i].x>>v[i].y;
for (int i=0; i<n; i++)
for (int j=i+1; j<n; j++){
ll a=v[i].y-v[j].y, b=v[i].x-v[j].x;
if (a==0)
pant[{1, 0}]++;
else if (b==0)
pant[{0, 1}]++;
else{
ll gcd=__gcd(abs(a), abs(b));
ll sgn;
if (a*b>0)
sgn=1;
else sgn=-1;
pant[{abs(a)/gcd*sgn, abs(b)/gcd}];
}
}
ll sol=0;
for (auto it:pant)
sol+=it.second*(it.second-1)/2;
fout<<sol;
return 0;
}