2011-08-22 17:39:04Morris
b207. F. 世界盃
b207. F. 世界盃
內容 :
2010
年南非世界盃即將到來,現在各區預賽都打得難分難解,身為亞洲足球總會主席的你,必須負責主辦亞洲區的預賽,按照慣例亞洲區將有4.5
個國家可以晉級會內賽,為什麼會有小數點呢?因為除了直接晉級的四支隊伍以外,排名第五的隊伍必須跟大洋洲的冠軍隊進行附加賽,贏的國家才能晉級。
亞洲區預賽已經進行到最後八強,八支球隊分成兩個小組激戰,所有的賽事都已經比完,到了選出晉級球隊的時候,妳的祕書今天早上已經將各隊對戰的成績交給你,你必須依照以下的規則列出五支球隊:
1. 先列出 A 組的前兩名
2. 再列出 B 組的前兩名
3. 接著列出戰績最佳的第三名
比較球隊勝負的方式是看積分,贏一場得三分,平手兩隊各得一分,如果積分相同的話,比誰的進球數多,還是相同就比誰的失球少,再相同的話比國家名稱的字典順序看誰比較前面。
亞洲區預賽已經進行到最後八強,八支球隊分成兩個小組激戰,所有的賽事都已經比完,到了選出晉級球隊的時候,妳的祕書今天早上已經將各隊對戰的成績交給你,你必須依照以下的規則列出五支球隊:
1. 先列出 A 組的前兩名
2. 再列出 B 組的前兩名
3. 接著列出戰績最佳的第三名
比較球隊勝負的方式是看積分,贏一場得三分,平手兩隊各得一分,如果積分相同的話,比誰的進球數多,還是相同就比誰的失球少,再相同的話比國家名稱的字典順序看誰比較前面。
輸入說明
:
輸入檔中會有多筆資料,第一行是一個整數
N(1<N<=50),用來表示有幾筆測試資料。每筆測試資料的前八行是國家名稱(國家名稱不會有空白字元,且長度不會超過100
個字元),前四隊為A 組,後四隊為B 組,接下來12 行為對戰成績,對戰成績表示方法如下:
<國家A> <A 得分> <B 得分> <國家B>
<國家A> <A 得分> <B 得分> <國家B>
輸出說明
:
對每組測試資料,請參考範例輸出,用相同的格式輸出五個國家名稱。
範例輸入 :
1 Japan South_Korea China Iraq Iran Chinese_Taipei Hong_Kong Macow Japan 0 0 South_Korea Japan 3 0 China Japan 2 0 Iraq South_Korea 2 0 China South_Korea 1 1 Iraq China 0 2 Iraq Iran 8 0 Chinese_Taipei Iran 5 0 Hong_Kong Iran 10 0 Macow Chinese_Taipei 0 5 Hong_Kong Chinese_Taipei 3 0 Macow Hong_Kong 2 0 Macow
範例輸出 :
A1 Japan A2 South_Korea B1 Iran B2 Hong_Kong BEST3 Iraq
提示
:
出處
:
2008 NPSC 國中組初賽
作法 : 模擬
套用一下眾多的內建, 我有點懶了
/**********************************************************************************/
/* Problem: b207 "F. 世界盃" from 2008 NPSC 國中組初賽 */
/* Language: C */
/* Result: AC (2ms, 232KB) on ZeroJudge */
/* Author: morris1028 at 2011-08-22 17:32:58 */
/**********************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Data {
char name[101];
int inball, outball, score;
}Data;
Data team[8];
int cmp(const void *a, const void *b) {
Data *aa, *bb;
aa = (Data *)a, bb = (Data *)b;
if(aa->score > bb->score) return 0;
else if(aa -> score < bb->score) return 1;
else {
if(aa->inball > bb->inball) return 0;
else if(aa->inball < bb->inball) return 1;
else {
if(aa->outball < bb->outball) return 0;
else if(aa->outball > bb->outball) return 1;
else {
int i;
for(i = 0; ; i++)
if(aa->name[i] < bb->name[i])
return 0;
else if(aa->name[i] > bb->name[i])
return 1;
return 0;
}
}
}
}
main() {
int n, a, b, As, Bs;
scanf("%d", &n);
while(n--) {
for(a = 0; a < 8; a++) {
scanf("%s", team[a].name);
team[a].inball = 0, team[a].outball = 0;
team[a].score = 0;
}
char A[101], B[101], Aidx, Bidx;
for(a = 0; a < 12; a++) {
scanf("%s %d %d %s", A, &As, &Bs, B);
for(b = 0; b < 8; b++)
if(!strcmp(team[b].name, A))
{Aidx = b;break;}
for(b = 0; b < 8; b++)
if(!strcmp(team[b].name, B))
{Bidx = b;break;}
team[Aidx].inball += As, team[Aidx].outball += Bs;
team[Bidx].inball += Bs, team[Bidx].outball += As;
if(As > Bs) team[Aidx].score += 3;
else if(As < Bs) team[Bidx].score += 3;
else team[Aidx].score++, team[Bidx].score++;
}
qsort(team, 4, sizeof(Data), cmp);
qsort(team+4, 4, sizeof(Data), cmp);
for(a = 0; a < 2; a++)
printf("A%d %s\n", a+1, team[a].name);
for(a = 4; a < 6; a++)
printf("B%d %s\n", a-3, team[a].name);
if(!cmp(&team[2], &team[6]))
printf("BEST3 %s\n", team[2].name);
else printf("BEST3 %s\n", team[6].name);
}
return 0;
}
上一篇:b212. E. 不景氣的年代
下一篇:b046. E. 智慧型單字查詢