Cod sursa(job #1018084)

Utilizator Dayanna000Amegica Dayanna Dayanna000 Data 28 octombrie 2013 20:57:05
Problema Trapez Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <iostream>
#include <fstream>
using namespace std;
void quicksort(long a[],long b[],long st,long dr)
  {
      long i,j,aux,pa,pb;
      i=st;
      j=dr;
      pa=a[(i+j)/2];
      pb=b[(i+j)/2];
      while (i <= j)
         {

        while (a[i]*pb<b[i]*pa)
            i++;
        while (a[j]*pb>b[j]*pa)
           j--;
        if (i <= j)
              {
                aux = a[i];
                a[i] = a[j];
                a[j] = aux;
                aux = b[i];
                b[i] = b[j];
                b[j] = aux;
                i++;
                j--;
              }
        }

    if (st < j)
       quicksort(a,b,st,j);
    if (i < dr)
        quicksort(a,b,i,dr);
}

int main()
{
    ifstream f("trapez.in");
    ofstream g("trapez.out");
    long n,i,j,nr=0,a[1001],b[1001],s,suma,c[500000],d[500000];
    f>>n;
    for(i=1;i<=n;i++)
        f>>a[i]>>b[i];
    for(i=1;i<=n-1;i++)
         for(j=i+1;j<=n;j++)
            if(a[i]==a[j])
               {
                   nr++;
                   c[nr]=200000000;
                   d[nr]=1;
               }
               else
               {
                   nr++;
                   c[nr]=b[j]-b[i];
                   d[nr]=a[j]-a[i];
                   if(d[nr]<0)
                      {
                          c[nr]=-c[nr];
                          d[nr]=-d[nr];
                      }
               }
    quicksort(c,d,1,nr);
    s=0;
    suma=0;
    for(i=1;i<=nr-1;i++)
      if(c[i]*d[i+1]==d[i]*c[i+1])
          s++;
          else
          {
              suma=suma+s*(s-1)/2;
              s=1;
          }
    suma=suma+s*(s-1)/2;
    g<<suma;
    f.close();
    g.close();
    return 0;
  }