Pagini recente » Cod sursa (job #1107827) | Cod sursa (job #820252) | Cod sursa (job #2541869) | Cod sursa (job #1389499) | Cod sursa (job #2876549)
#include <bits/stdc++.h>
#pragma GCC optimize ("Ofast")
using namespace std;
ifstream fin ("trapez.in");
ofstream fout ("trapez.out");
const double 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];
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){
if(pct[i].x >= pct[j].x)
raport[++rcnt] = INF;
else
raport[++rcnt] = -INF;
continue;
}
raport[++rcnt] = (double)(pct[i].x - pct[j].x) / (pct[i].y - pct[j].y);
}
sort(raport+1, raport+rcnt+1);
len = 1;
for(int i=2; i<=rcnt; i++)
if(raport[i] == raport[i-1])
len++;
else{
sol += len * (len-1) / 2;
len = 1;
}
sol += len * (len-1) / 2;
fout<<sol;
return 0;
}