Cod sursa(job #1714527)

Utilizator GeanaVladGeana Vlad GeanaVlad Data 8 iunie 2016 16:41:04
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <iostream>
#include<algorithm>
#include<fstream>
#include<vector>
using namespace std;
ifstream f("trapez.in");
ofstream g("trapez.out");
int poz[1001],n,i,x[1001],y[1001],j,l,nr,cnt;
vector<int>numarator,numitor;
struct fractie
{
    int numarator,numitor;
};
fractie z;
vector<fractie>p;
bool comp(fractie a,fractie b)
{
    return a.numarator*b.numitor>a.numitor*b.numarator;
}
void simplifica(int i)
{
    int r,a=p[i].numarator,b=p[i].numitor;
    if(b)
    {
    r=a%b;
    while(r)
    {
        a=b;b=r;r=a%b;
    }
    p[i].numarator/=b;
    p[i].numitor/=b;
    }
    else
    {
        p[i].numarator=1;
        p[i].numitor=1;
    }
}
int main()
{
   f>>n;
   for(i=1;i<=n;i++) f>>x[i]>>y[i];
   for(i=1;i<n;i++)
   for(j=i+1;j<=n;j++)
   {
       z.numarator=y[j]-y[i];
       z.numitor=x[j]-x[i];
       p.push_back(z);
   }
   int l=n*(n-1)/2;
   sort(p.begin(),p.end(),comp);
   for(i=0;i<l;i++) if(p[i].numitor) cout<<p[i].numarator/p[i].numitor<<' ';
   for(i=0;i<l;i++)
   {
       simplifica(i);
       if((i>0&&p[i].numarator==p[i-1].numarator && p[i].numitor==p[i-1].numitor) || (p[i].numarator==p[i-1].numarator&&p[i].numarator==0))
           nr++;
       else
       {
           cnt+=nr*(nr-1)/2;
           nr=0;
       }
   }
   g<<cnt;

}