Cod sursa(job #1714585)

Utilizator GeanaVladGeana Vlad GeanaVlad Data 8 iunie 2016 18:42:04
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 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=1,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;
    }
}
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++)
   {
       simplifica(i);
       if((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) || (p[i].numitor==p[i-1].numitor && p[i].numitor==0))
           nr++;
       else
       {
           cnt+=nr*(nr-1)/2;
           nr=1;
       }
   }
   cnt+=nr*(nr-1)/2;
   g<<cnt;

}