1. 程式人生 > >Race Sorting(第十五屆浙江大學寧波理工學院程式設計大賽I)

Race Sorting(第十五屆浙江大學寧波理工學院程式設計大賽I)

Race Sorting

題目傳送門
題目描述
星際爭霸(StarCraft)是暴雪公司製作發行的一款即時戰略遊戲。遊戲描述了26世紀初期,位於銀河系中心的三個種族在克普魯星際空間中爭奪霸權的故事。三個種族分別是:人類(Terran),異蟲(Zerg),星靈(Protoss)。
現在tokitsukaze擁有n個單位,每個單位的編號是1-n,且沒有任何兩個單位編號相同。每個單位可能是人類,異蟲,星靈中的一種。
tokitsukaze定義了一種排序:種族排序(Race Sorting)。
規則是這樣的:規定三個種族的先後順序,race1,race2,race3,表示第一個種族的所有單位在第二個種族的所有單位和第三個種族的所有單位之前,第二個種族的所有單位在第三個種族的所有單位之前。但是注意:種族間的單位,他們的相對順序不發生改變。
也就是說,如果給出先後順序為Zerg,Terran,Protoss,那麼所有為Zerg的單位排在最前面,緊接著是所有Terran的單位,最後是所有Protoss的單位。如果其中一個種族沒有任何一個單位,則跳過該種族。
那麼對於tokitsukaze擁有的n個單位,做完給定先後順序的Race Sorting後,n個單位的順序是什麼?請按順序輸出每個單位的編號。

輸入描述:
第一行包含一個正整數T(T≤20),表示T組資料。
對於每一組資料:
第一行包含一個正整數n(1≤n≤1000),表示有n個單位。
接下來n行,每行輸入格式為:ID is race
其中,ID為一個正整數(1≤ID≤n),資料保證ID唯一。race為一個字串,保證是"Terran",“Zerg”,“Protoss"三種中的一種(沒有引號)。
最後一行包含一個字串,格式為:race1,race2,race3。表示3種種族的先後順序。
資料保證race1,race2,race3為"Terran”,“Zerg”,"Protoss"的一種排列(沒有引號)。
詳情請見樣例。

輸出描述:
對於每組資料:
按race1,race2,race3的順序,在一行輸出排序後的ID序列,兩個ID用空格隔開,行末無多餘空格。

示例
輸入
3
5
1 is Terran
2 is Zerg
3 is Zerg
4 is Protoss
5 is Terran
Zerg,Terran,Protoss
5
1 is Terran
3 is Zerg
2 is Zerg
4 is Protoss
5 is Terran
Zerg,Terran,Protoss
1
1 is Protoss
Zerg,Protoss,Terran

輸出
2 3 1 5 4
3 2 1 5 4
1
把所有輸入的字串存起來,遍歷查詢即可。

#include<stdio.h>
#include<string.h>
int main()
{
    int T,i,j;
    scanf("%d",&T);
    while (T--)
    {
        int n,i,x,t[1000];
        char f[1000],s[30];
        scanf("%d",&n);
        for (i=1; i<=n; ++i)
        {
            scanf("%d is %s",&t[i],s);
            f[i]=s[0];
        }
        scanf("%s",s);
        for (i=0; i<=strlen(s)-1; ++i)
            if(s[i]=='T'||s[i]=='Z'||s[i]=='P')
                for (j=1; j<=n; ++j)
                    if (f[j]==s[i])
                        printf("%d ",t[j]);
        printf("\n");
    }
    return 0;
}