Advertisement
gonzalo1796

Sessió 1 - Exercici 2

Mar 3rd, 2015
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.31 KB | None | 0 0
  1. #include "utils.PRO2"
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. struct Equipo {
  6.     int id, puntos, gFavor, gContra;
  7. };
  8.  
  9. struct Result {
  10.     int golesI, golesJ;
  11. };
  12.  
  13. typedef vector<vector<Result> > Results;
  14.  
  15. void readResults(Results& r, int n) {
  16.     for (int i = 0; i < n; ++i) {
  17.         for (int j = 0; j < n; ++j) {
  18.             r[i][j].golesI = readint();
  19.             r[i][j].golesJ = readint();
  20.         }
  21.     }
  22. }
  23.  
  24. void inicializarEquipos(vector<Equipo>& equipos, int n) {
  25.     for(int i = 0; i < n; ++i) {
  26.         equipos[i].id = i+1;
  27.         equipos[i].puntos = 0;
  28.         equipos[i].gFavor = 0;
  29.         equipos[i].gContra = 0;
  30.     }
  31. }
  32.  
  33. void calcularPuntos(vector<Equipo>& clasif, const Results& results, int n) {
  34.     for(int i = 0; i < n; ++i) {
  35.         for(int j = 0; j < n; ++j) {
  36.             if(i != j) {
  37.                 clasif[i].gFavor += results[i][j].golesI;
  38.                 clasif[i].gContra += results[i][j].golesJ;
  39.  
  40.                 clasif[j].gFavor += results[i][j].golesJ;
  41.                 clasif[j].gContra += results[i][j].golesI;
  42.  
  43.                 if(results[i][j].golesI > results[i][j].golesJ) {
  44.                     clasif[i].puntos += 3;
  45.                 } else if(results[i][j].golesI < results[i][j].golesJ) {
  46.                     clasif[j].puntos += 3;
  47.                 } else {
  48.                     ++clasif[i].puntos;
  49.                     ++clasif[j].puntos;
  50.                 }
  51.             }
  52.         }
  53.     }
  54. }
  55.  
  56. bool compare (const Equipo& a, const Equipo& b) {
  57.     if (a.puntos != b.puntos){
  58.         return a.puntos > b.puntos;
  59.     } else {
  60.         int difA = a.gFavor-a.gContra;
  61.         int difB = b.gFavor-b.gContra;
  62.         if (difA != difB) {
  63.             return difA > difB;
  64.         } else {
  65.             return a.id < b.id;
  66.         }
  67.     }
  68. }
  69.  
  70. void printClasificacion(const vector<Equipo>& clasif, int n) {
  71.     for(int i = 0; i < n; ++i) {
  72.         cout << clasif[i].id << " " << clasif[i].puntos << " " << clasif[i].gFavor << " " << clasif[i].gContra << endl;
  73.     }
  74. }
  75.  
  76. int main() {
  77.     int n = readint();
  78.     Results results(n, vector<Result>(n));
  79.     readResults(results, n);
  80.     vector<Equipo> clasif(n);
  81.     inicializarEquipos(clasif, n);
  82.     calcularPuntos(clasif, results, n);
  83.     sort(clasif.begin(), clasif.end(), compare);
  84.     printClasificacion(clasif, n);
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement