Pagini recente » concurs_runda1 | Borderou de evaluare (job #1754278) | Cod sursa (job #2294610) | Borderou de evaluare (job #3206502) | Cod sursa (job #1000457)
#include<fstream>
#include<algorithm>
#define min(a,b) ( a < b ? a : b)
#define max(a,b) ( a > b ? a : b)
using namespace std;
ifstream in("trapez.in");
ofstream out("trapez.out");
const int N = 1005;
struct coord{
int x,y;
} v[N],a[N*N];
int n,k,s;
int cmmdc(int a,int b){
if(!b) return a;
else return cmmdc(b,a%b);
}
bool cmp(coord a,coord b){
if(a.x == b.x) return a.y < b.y;
return a.x < b.x;
}
int main(){
int i,j;
in>>n;
for(i=1;i<=n;i++) in>>v[i].x>>v[i].y;
for(i=1;i<=n;i++){
for(j=i+1;j<=n;j++){
coord u;
u.x=v[j].x-v[i].x;
u.y=v[j].y-v[i].y;
int cm=cmmdc(u.x,u.y);
u.x/=cm;
u.y/=cm;
a[++k]=u;
}
}
sort(&a[1],&a[k+1],cmp);
int cc=1;
for(i=2;i<=k;i++){
if(a[i].x==a[i-1].x && a[i].y==a[i-1].y){
cc++;
}
else{
s+=cc*(cc-1)/2;
cc=1;
}
}
out<<s;
return 0;
}