Cod sursa(job #656534)

Utilizator giuliastefGiulia Stef giuliastef Data 4 ianuarie 2012 19:15:16
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <algorithm>
#define NMAX 1011
using namespace std;
int n,k,sol;
int x[NMAX],y[NMAX];
struct panta{
       int numarator,numitor;
       }m[NMAX*NMAX];
bool cmp(panta a,panta b){
     if(a.numarator>b.numarator)
      return 1;
     if(a.numitor>b.numitor)
      return 1;
     return 0;
} 
void read(){
     int i;
     ifstream f("trapez.in");
     f>>n;
     for(i=1;i<=n;++i){
                       f>>x[i]>>y[i];
     }
}
int cmmdc(int a, int b){
    int r;
    while(b){
             r=a%b;
             a=b;
             b=r;
    }
    return a;  
}
void solve(){
     int i,j,a,b,div,nr;
     for(i=1;i<n;++i)
      for(j=i+1;j<=n;++j){
       a=y[j]-y[i];
       b=x[j]-x[i];
       div=cmmdc(a,b);
       m[++k].numarator=a/div;
       m[k].numitor=b/div;
      }
     sort(m+1,m+k+1,cmp);
     nr=1;
     for(i=1;i<k;++i)
      if(m[i].numarator==m[i+1].numarator && m[i].numitor==m[i+1].numitor) nr++;
      else {
       sol=sol+(nr-1)*nr/2;
       nr=1;
      }
}
void write(){
     ofstream g("trapez.out");
     g<<sol<<"\n";
}
int main(){
    read();
    solve();
    write();
    return 0;
}