Cod sursa(job #1413700)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 2 aprilie 2015 01:13:46
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <fstream>
#include <algorithm>
#define DIM 1000000
#define f first
#define s second
using namespace std;

ifstream fin ("trapez.in" );
ofstream fout("trapez.out");

int N, M, i, j, K, ok, X1, X2, Y1, Y2, sum;
pair <int, int> V[DIM], W[DIM]; int aux, nr;

void SetUp(){
     fin >> M;
     for(i = 1; i <= M; i ++)
          fin >> W[i].f >> W[i].s;
     /*
          SETEZ PUNCTELE CU ORIGINEA IN (O, O)
     */
     for(i = 1; i < M; i ++){
          for(j = i+1; j <= M; j ++){
               X1 = W[i].f;
               X2 = W[j].f;
               Y1 = W[i].s;
               Y2 = W[j].s;
               if(Y1 > Y2){
                    aux = X1;
                    X1 = X2;
                    X2 = aux;
                    aux = Y1;
                    Y1 = Y2;
                    Y2 = aux;
               }
               X2 -= X1; X1 = 0;
               Y2 -= Y1; Y1 = 0;
               N ++;
               V[N].f = X2;
               V[N].s = Y2;
          }
     }
     return;
}

int cmp(int a, int b){
     int X1, X2, Y1, Y2;
     X1 = V[a].f;
     X2 = V[b].f;
     Y1 = V[a].s;
     Y2 = V[b].s;
     return ((X1 * (-1)) / Y1) > ((X2 * (-1)) / Y2);
}

void Sort(){
     //sort(V + 1, V + N + 1, cmp);
     return;
}

void GetSol(){
     V[0].f = V[0].s = -100000;
     for(i = 1; i <= N + 1; i ++){
          X1 = V[i-1].f;
          Y1 = V[i-1].s;
          X2 = V[i].f;
          Y2 = V[i].s;
          if(((X1 * (-1))) == ((X2 * (-1)))){
               nr ++;
          }
          else{
               sum += (nr * (nr - 1)) / 2;
               nr = 1;
          }
     }
     fout << sum+1;
     return;
}

int main(){
     SetUp();
     Sort();
     GetSol();
     return 0;
}