#include #include #include int order[90]; int t; int m; char teams[90][110]; char buf1[110], buf2[110]; char buf3[110], buf4[110]; int gf[90]; int ga[90]; int t1, t2; char ress[90][90][4]; int score[90]; int ct1, ct2; int c1len; int won[90]; int tie[90]; int lost[90]; int maxw, maxt, maxl, maxg, maxgf, maxga, maxp; int games[90]; int dig(int x) { int res = 1; while (x >= 10) { res++; x /= 10; } return res; } int cmpt(const void *x, const void *y) { int i, j; i = *((int *) x); j = *((int *) y); if (score[i] > score[j]) { return -1; } else if (score[i] < score[j]) { return 1;} int scdiff1 = gf[i] - ga[i]; int scdiff2 = gf[j] - ga[j]; if (scdiff1 > scdiff2) { return -1; } else if (scdiff1 < scdiff2) { return 1; } if (gf[i] > gf[j]) { return -1; } else if (gf[i] < gf[j]) { return 1; } if (won[i] > won[j]) return -1; else if (won[i] < won[j]) return 1; if (i > j) return -1; else if (i < j) return 1; return 0; } void erow(int c1len, int t) { printf("+"); for (int j = 0; j < c1len; j++) { printf("-"); } for (int j = 0; j < t;j ++) { printf("+---"); } printf("+\n"); } int main() { while (1) { c1len = 0; scanf("%d", &t); if (t == 0) { return 0; } for (int i = 0; i < t; i++) { order[i] = i; won[i] = 0; lost[i] = tie[i] = 0; scanf("%s", teams[i]); if (strlen(teams[i]) > c1len) c1len = strlen(teams[i]); score[i] = 0; gf[i] = ga[i] = 0; for (int j = 0; j < t; j++) { ress[i][j][0] = 0; } games[i] = 0; } scanf("%d", &m); //printf("%d\n", m); for (int i = 0; i < m; i++) { cmpt(&i, &i); scanf("%s - %s %d:%d", buf1, buf2, &t1, &t2); //printf("%s <> %s - %s\n", buf1, buf2, buf3); for (int j = 0; j < t; j++) { if (strcmp(buf1, teams[j]) == 0) { if (t1 > t2) { score[j] += 3; won[j]++; } else if (t1 == t2) { tie[j]++; score[j]++; } else { lost[j]++; } ct1 = j; gf[j]+=t1; ga[j]+=t2; games[j]++; } if (strcmp(buf2, teams[j]) == 0) { if (t2 > t1) { score[j] += 3; won[j]++; } else if (t2 == t1) { score[j]++; tie[j]++; } else { lost[j]++; } ct2 = j; gf[j]+=t2; ga[j]+=t1; games[j]++; } } sprintf(ress[ct1][ct2], "%d:%d", t1, t2); } printf("RESULTS:\n"); erow(c1len, t); printf("|"); for (int j = 0; j < c1len; j++) { printf(" "); } printf("|"); for (int j = 0; j < t;j ++) { int tlen = strlen(teams[j]); if (tlen >= 3) { printf("%c%c%c", teams[j][0], teams[j][1], teams[j][2]); } else { for (int k = 0; k < tlen; k++) { printf("%c", teams[j][k]); } for (int k = tlen; k < 3; k++) { printf(" "); } } printf("|"); } printf("\n"); erow(c1len, t); for (int o = 0; o < t; o++) { printf("|"); printf("%s", teams[o]); for (int k = strlen(teams[o]); k < c1len; k++) { printf(" "); } printf("|"); for (int p = 0; p < t; p++) { if (p == o) { printf(" X "); } else { if (ress[o][p][0]) { printf("%s", ress[o][p]); } else { printf(" "); } } printf("|"); } printf("\n"); erow(c1len, t); } qsort(order, t, sizeof(int), cmpt); // int maxw, maxt, maxl, maxg, maxgf, maxga, maxp; maxw = maxt = maxl = maxg = maxgf = maxga = maxp; int d1, d2, d3, d4, d5, d6, d7; for (int z = 0; z < t; z++) { if (maxw < won[z]) maxw = won[z]; if (maxt < tie[z]) maxt = tie[z]; if (maxl < lost[z]) maxl = lost[z]; if (maxg < games[z]) maxg = games[z]; if (maxgf < gf[z]) maxgf = gf[z]; if (maxga < ga[z]) maxga = ga[z]; if (maxp < score[z]) maxp = score[z]; } d1 = dig(maxg); d2 = dig(maxw); d3 = dig(maxt); d4 = dig(maxl); d5 = dig(maxgf) + dig(maxga) + 1; d7 = dig(maxp); char format[100]; sprintf(format, "%%%dd %%%dd %%%dd %%%dd %%s%%s %%%dd", d1, d2, d3, d4, d7); //printf("%s\n", format); printf("\nSTANDINGS:\n----------\n"); for (int z = 0; z < t; z++) { int A = order[z]; if (t > 9) { printf("%2d. ", z + 1); } else { printf("%d. ", z + 1); } char skoore[100]; char medzery[100]; sprintf(skoore, "%d:%d", gf[A], ga[A]); for (int Q = 0; Q < d5 - strlen(skoore); Q++) { medzery[Q] = ' '; } medzery[d5 - strlen(skoore)] = 0; printf("%s ", teams[A]); for (int q = strlen(teams[A]); q < c1len; q++) { printf(" ");} printf(format, games[A], won[A], tie[A], lost[A], medzery, skoore, score[A]); printf("\n"); } printf("\n"); } return 0; }