6.1问题A:学生のためのコースリスト(25)

タイトル説明

浙江大学には40000人の学生がおり、2500のコースを提供しています。これで、すべてのコースの学生名リストが与えられたので、クエリに来た各学生の登録済みコースリストを出力することになっています。

入る

各入力ファイルには、1つのテストケースが含まれています。いずれの場合も、最初の行には2つの正の整数が含まれています。N(<= 40000)はコースリストを検索する学生の数、K(<= 2500)はコースの総数です。次に、コース(1からKまでの番号が付けられた)の学生名リストが次の形式で示されます。各コース iについて、最初にコースインデックス i と登録された学生の数N i  (<= 200)が1行で示されます。 。そして、次の行では、N I 生徒の名前が与えられています。学生名は、大文字の3文字と1桁の数字で構成されます。最後に、最後の行には、クエリに来る学生のN人の名前が含まれています。行内のすべての名前と番号はスペースで区切られます。

出力

テストケースごとに、結果をN行で印刷します。各行は、次の形式で1人の学生に対応します。最初に学生の名前を印刷し、次にその学生の登録済みコースの総数を印刷し、最後にコースのインデックスを昇順で印刷します。クエリ結果は、入力と同じ順序で出力する必要があります。行内のすべてのデータはスペースで区切る必要があり、行の終わりに余分なスペースはありません。

サンプル入力コピー

11 5 
4 7 
BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1 
1~4 
ANN0 BOB5 JAY9 LOR6 
2~7 
ANN0 BOB5 FRA8 JAY9 JOE4 KAT3 LOR6 
3 1 
BOB5 
5~9 
AMY7 ANN0 BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1 
ZOE1 ANN0 BOB5 JOE4 JAY9 FRA8 DON2 AMY7 KAT3 LOR6 NON9

サンプル出力コピー

ZOE1 2 4 5 
ANN0 3 1 2 5 
BOB5 5 1 2 3 4 5 
JOE4 1 2 
JAY9 4 1 2 4 5 
FRA8 3 2 4 5 
DON2 2 4 5 
AMY7 1 5 
KAT3 3 2 4 5 
LOR6 4 1 2 4 5 
NON9 0
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> v[1000000];
int change(char s[])
{
    int ans=(s[0]-'A')*26+(s[1]-'A')*26*26+(s[2]-'A')*26*26*26+(s[3]-'0');
    return ans;
}
int main()
{
    int n,k,x,y,num;
    char s[10];
    scanf("%d %d",&n,&k);
    for(int i=0;i<k;i++)
    {
        scanf("%d %d",&x,&y);
        while(y--)
        {
            scanf("%s",s);
            num=change(s);
            v[num].push_back(x);
        }
    }
    while(n--){
        scanf("%s",s);
        num=change(s);
        int len=v[num].size();
        printf("%s %d ",s,len);
        sort(v[num].begin(),v[num].end());
        for(int i=0;i<len;i++)
            printf("%d ",v[num][i]);
        printf("\n");
    }
    return 0;
}

 

おすすめ

転載: blog.csdn.net/wangws_sb/article/details/114678221