7-47 列印選課學生名單 (25 分)
阿新 • • 發佈:2018-12-01
7-47 列印選課學生名單 (25 分)
假設全校有最多40000名學生和最多2500門課程。現給出每個學生的選課清單,要求輸出每門課的選課學生名單。
輸入格式:
輸入的第一行是兩個正整數:N(≤40000),為全校學生總數;K(≤2500),為總課程數。此後N行,每行包括一個學生姓名(3個大寫英文字母+1位數字)、一個正整數C(≤20)代表該生所選的課程門數、隨後是C個課程編號。簡單起見,課程從1到K編號。
輸出格式:
順序輸出課程1到K的選課學生名單。格式為:對每一門課,首先在一行中輸出課程編號和選課學生總數(之間用空格分隔),之後在第二行按字典序輸出學生名單,每個學生名字佔一行。
輸入樣例:
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 ZOE1
#include<bits/stdc++.h> using namespace std; vector<vector<string> >q; int main() { int n,m; scanf("%d%d",&n,&m); q.resize(n+1); for(int i=0; i<n; i++) { string s; cin>>s; int t; cin>>t; while(t--) { int x; cin>>x; q[x].push_back(s); } } for(int i=1; i<=m; i++) { sort(q[i].begin(),q[i].end()); printf("%d %d\n",i,q[i].size()); for(int j=0; j<(int)q[i].size(); j++) { cout<<q[i][j]<<endl; } } return 0; }