#include<iostream> #include<cstring> #include<cstdio> #include<cstdlib> #include<map> #include<cctype> #include<cmath> #include<vector> #include<algorithm> #define db(a) cout << #a << " = " << a << endl; #define db2(a, b) cout << #a << " = " << a << " " << #b << " = " << b << endl; #define foreach(it, l) for(typeof(l.begin()) it = l.begin(); it != l.end(); it++) using namespace std; struct team{ string name; int total_points; int games_played; int wins; int ties; int losses; int goal_scored; int goal_against; }; bool cmp(team a, team b){ if (a.total_points > b.total_points) return true; else { if (a.total_points == b.total_points){ if(a.wins > b.wins) return true; else { if (a.wins == b.wins) { if ((a.goal_scored - a.goal_against) > (b.goal_scored - b.goal_against)) return true; else { if ((a.goal_scored - a.goal_against) == (b.goal_scored - b.goal_against)) { if (a.goal_scored > b.goal_scored) return true; else { if (a.goal_scored == b.goal_scored) { if (a.games_played < b.games_played) return true; else { if (a.games_played == b.games_played) { if (strcasecmp(a.name.c_str(), b.name.c_str()) <= 0) return true; else return false; } else return false; } } else return false; } } else return false; } } else { return false; } } } else { return false; } } } int main(){ int N, T, G, ptosA, ptosB; string teamA, teamB; string tournament; string linea; scanf("%d\n", &N); for (int cases = 0; cases < N; cases++) { if(cases != 0) printf("\n"); getline(cin , tournament, '\n'); scanf("%d\n", &T); team equipos[T]; for (int i = 0; i < T; i++) { getline(cin, equipos[i].name, '\n'); //db(equipos[i].name); equipos[i].total_points = 0;equipos[i].games_played = 0; equipos[i].wins = 0;equipos[i].ties = 0;equipos[i].losses = 0; equipos[i].goal_scored = 0;equipos[i].goal_against = 0; } scanf("%d\n", &G); for (int i = 0; i < G; i++) { getline(cin, linea , '\n'); //db(linea); char *st, *buf, sep[] = "#@"; buf = strdup(linea.c_str()); st = strtok(buf, sep); teamA = st; st = strtok(0, sep); ptosA = atoi(st); st = strtok(0, sep); ptosB = atoi(st); st = strtok(0, sep); teamB = st; /*db2(teamA, ptosA); db2(teamB, ptosB);*/ for (int k = 0; k < T; k++){ if(equipos[k].name == teamA){ if(ptosA > ptosB) equipos[k].wins++, equipos[k].total_points += 3; if(ptosA == ptosB) equipos[k].ties++, equipos[k].total_points++; if(ptosA < ptosB) equipos[k].losses++; equipos[k].games_played++; equipos[k].goal_scored += ptosA; equipos[k].goal_against += ptosB; } if(equipos[k].name == teamB){ if(ptosB > ptosA) equipos[k].wins++, equipos[k].total_points += 3; if(ptosB == ptosA) equipos[k].ties++, equipos[k].total_points++; if(ptosB < ptosA) equipos[k].losses++; equipos[k].games_played++; equipos[k].goal_scored += ptosB; equipos[k].goal_against += ptosA; } } } sort(equipos, equipos + T, cmp); printf("%s\n", tournament.c_str()); for (int k = 0; k < T; k++) { printf("%d) %s %dp, %dg (%d-%d-%d), %dgd (%d-%d)\n", k + 1, equipos[k].name.c_str(), equipos[k].total_points, equipos[k].games_played, equipos[k].wins, equipos[k].ties, equipos[k].losses, (equipos[k].goal_scored - equipos[k].goal_against), equipos[k].goal_scored, equipos[k].goal_against); } } }
lunes, 24 de octubre de 2011
Problem A: Football (aka Soccer) , uva
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario