UVA10194

来源:互联网 发布:怎么查淘宝账号权重 编辑:程序博客网 时间:2024/06/08 07:26

思路:模拟题。。不过有些麻烦。。

            排名规则要处理好,特别是最后两条,前一个是场次少的排在前面,后面一个是要按字典序排列,不分大小写。。。我就是在这个地方WA了好多次。。。。无奈。。

#include<stdio.h>#include<string.h>#include<ctype.h>#include<stdlib.h>struct Team{Team(){ point = 0; play = 0; win = 0; ties = 0; loss = 0; difference = 0; score = 0; against = 0;}int point;int play;int win;int ties;int loss;int difference;int score;int against;char name1[50];char name2[50];};int cmp(void const *a, void const *b){struct Team * c = (Team *)a;struct Team * d = (Team *)b;if (c -> point != d -> point)return d -> point - c -> point;if (c -> win != d -> win)return d -> win - c -> win;if (c -> difference != d -> difference)return d -> difference - c -> difference;if (c -> score != d -> score)return d -> score - c -> score;if (c -> play != d -> play)return c -> play - d -> play;return strcmp(c -> name2, d -> name2);}int main(){int cas, n, m;char s[110];scanf("%d", &cas);getchar();while (cas--){gets(s);scanf("%d", &n);Team team[1000];getchar();for(int i = 0; i < n; i++){gets(team[i].name1);for(int j = 0; j < strlen(team[i].name1); j++)team[i].name2[j] =tolower(team[i].name1[j]); team[i].name2[strlen(team[i].name1)] = '\0';}scanf("%d", &m);getchar();while (m--){int cnt = 0;char t1[50], t2[50], ch;while (ch = getchar(), ch != '#')t1[cnt++] = ch;t1[cnt] = '\0';int a, b;scanf("%d", &a);getchar();scanf("%d", &b);getchar();gets(t2);for(int i = 0; i < n; i++){if (strcmp(team[i].name1, t1) == 0){if (a > b){team[i].point += 3;team[i].difference += (a - b);team[i].win++;}else if (a == b){team[i].point += 1;team[i].ties++;}else{team[i].loss++;team[i].difference += (a - b);}team[i].play++;team[i].score += a;team[i].against += b;}if (strcmp(team[i].name1, t2) == 0){if (b > a){team[i].point += 3;team[i].difference += (b - a);team[i].win++;}else if (a == b){team[i].point += 1;team[i].ties++;}else{team[i].loss++;team[i].difference += (b - a);}team[i].play++;team[i].score += b;team[i].against += a;}}}qsort(team, n, sizeof(team[0]), cmp);puts(s);for(int i = 0; i < n; i++){printf("%d) %s %dp, %dg (%d-%d-%d), %dgd (%d-%d)\n", i + 1, team[i].name1, team[i].point, team[i].play, team[i].win, team[i].ties, team[i].loss, team[i].difference, team[i].score, team[i].against);}if (cas)printf("\n");}return 0;}



原创粉丝点击