Cod sursa(job #2082834)

Utilizator madalin98Gherghe Madalin madalin98 Data 6 decembrie 2017 20:29:11
Problema Trapez Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#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<=k;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;
}