6.1質問B:コースの学生リスト(25)

タイトル説明

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

入る

各入力ファイルには、1つのテストケースが含まれています。いずれの場合も、最初の行には2つの数値が含まれています。N(<= 40000)は学生の総数、K(<= 2500)はコースの総数です。次にN行が続き、それぞれに学生の名前(3つの大文字の英語文字と1桁の数字)、この学生が登録したコースの数である正の数C(<= 20)が含まれ、その後にCコースが続きます。数字。簡単にするために、コースには1からKまでの番号が付けられています。

出力

テストケースごとに、すべてのコースの学生名リストをコース番号の昇順で印刷します。コースごとに、まずコース番号と登録学生数をスペースで区切って1行に印刷します。次に、生徒の名前をアルファベット順に出力します。それぞれの名前は1行を占めます。

サンプル入力コピー

10 5 
ZOE1 2 4 5 
ANN0 3 5 2 1 
BOB5 5 3 4 2 1 5 
JOE4 1 2 
JAY9 4 1 2 5 4 
FRA8 3 4 2 5 
DON2 2 4 5 
AMY7 1 5 
KAT3 3 5 4 2 
LOR6 4 2 4 1 5

サンプル出力コピー

1 4 
ANN0 
BOB5 
JAY9 
LOR6 
2 7 
ANN0 
BOB5 
FRA8 
JAY9 
JOE4 
KAT3 
LOR6 
3 1 
BOB5 
4 7 
BOB5 
DON2 
FRA8 
JAY9 
KAT3 
LOR6 
ZOE1 
5 9 
AMY7 
ANN0 
BOB5 
DON2 
FRA8 
JAY9 
KAT3 
LOR6 
ZOE
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
    vector<string> v[3000];
    string s;
    int n,k,m,x;
    cin>>n>>k;
    for(int i=0;i<n;i++)
    {
        cin>>s>>m;
        while(m--)
        {
            cin>>x;
            v[x].push_back(s);
        }
    }
    for(int i=1;i<=k;i++)
    {
        int len=v[i].size();
        cout<<i<<" "<<len<<endl;
        sort(v[i].begin(),v[i].end());
        for(int j=0;j<len;j++)
            cout<<v[i][j]<<endl;
    }
    return 0;
}

 

おすすめ

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