Pagini recente » Cod sursa (job #1314763) | Cod sursa (job #1909186) | Cod sursa (job #2188919) | Cod sursa (job #1610696) | Cod sursa (job #2082831)
#include<fstream>
#include<iostream>
#include<cstdlib>
#include<algorithm>
using namespace std;
ifstream f("trapez.in");
ofstream g("trapez.out");
typedef struct{
int x,y;
}punct;
punct a[1005],b[1000*1000]; //pt b x reprezinta numaratorul si y numitorul
int cmmdc(int a,int b)
{
if(b==0) return a;
int r=a%b;
while(r)
{
a=b;
b=r;
r=a%b;
}
return b;
}
bool cmp(punct a,punct b)
{
if(a.x*b.y<a.y*b.x)return true;
return false;
}
int main()
{
int n,i,nr=0,j,nrt=0;
f>>n;
for(i=1;i<=n;i++)
f>>a[i].x>>a[i].y;
int k=0;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++){
b[++k].x=a[j].y-a[i].y;
b[k].y=a[j].x-a[i].x;
if(b[k].y<0){b[k].x*=-1;
b[k].y*=-1;}
int c=cmmdc(b[k].x,b[k].y);
b[k].x/=c;
b[k].y/=c;}
sort(b+1,b+k+1,cmp);
nr=1;
for(i=2;i<=n;i++)
if(b[i].x==b[i-1].x&&b[i].y==b[i-1].y)nr++;
else{
nrt+=nr*(nr-1)/2;
nr=1;
}
if(nr>1)nrt+=nr*(nr-1)/2;
g<<nrt;
return 0;
}