Pagini recente » Cod sursa (job #1959481) | Cod sursa (job #513108) | Cod sursa (job #1713179) | Cod sursa (job #2723215) | Cod sursa (job #2876460)
#include <bits/stdc++.h>
#pragma GCC optimize ("Ofast")
using namespace std;
ifstream fin ("trapez.in");
ofstream fout ("trapez.out");
const int INF = 2e9;
const int MAX_N = 1005;
int n, len, sol;
struct point{
int x, y;
} pct[MAX_N];
static inline bool cmpX(const point& p1, const point& p2){
return p1.x < p2.x;
}
static inline bool cmpY(const point& p1, const point& p2){
return p1.y < p2.y;
}
inline int _abs(const int k){
return (k < 0 ? -k : k);
}
int rcnt;
double raport[MAX_N * MAX_N];
const double ERROR = 1e-4;
static inline bool egal(const double& a, const double& b){
return (-ERROR <= a-b && a-b <= ERROR);
}
int main (){
ios_base::sync_with_stdio(false);
fin.tie(nullptr);
fout.tie(nullptr);
fin>>n;
for(int i=1; i<=n; i++)
fin>>pct[i].x>>pct[i].y;
for(int i=1; i < n; i++)
for(int j=i+1; j<=n; j++)
if(pct[i].y == pct[j].y)
raport[++rcnt] = INF;
else
raport[++rcnt] = (double)_abs(pct[i].x - pct[j].x) / _abs(pct[i].y - pct[j].y);
sort(raport+1, raport+rcnt+1);
len = 1;
for(int i=2; i<=rcnt; i++)
if(egal(raport[i], raport[i-1]))
len++;
else{
sol += len * (len-1) / 2;
len = 1;
}
fout<<sol;
return 0;
}