タイトル説明
浙江大学には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;
}