#include<iostream> #include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #include<algorithm> #include<map> #include<vector> #include<queue> using namespace std; const int maxn=40010; //最大学生人数 const int maxc=2510; //最大课程门数 char name[maxn][5]; //maxn个学生 vector<int> course[maxc]; //course[i]存放第i门课的所有学生编号 //注意上面的是vector数组 bool cmp(int a,int b){ return strcmp(name[a],name[b])<0; //按姓名字典序从小到大排序 } int main(){ int n,k,c,courseID; scanf("%d%d",&n,&k); //学生人数及课程数 for(int i=0;i<n;i++){ //对每个学生进行遍历 scanf("%s %d",name[i],&c); for(int j=0;j<c;j++){ //遍历每个学生的课程编号 scanf("%d",&courseID); course[courseID].push_back(i); //将学生i加入第courseID门课中 } } //输出操作 for(int i=1;i<=k;i++){ printf("%d %d\n",i,course[i].size()); //第i门课的学生数 sort(course[i].begin() , course[i].end(), cmp);//对第i门课的学生排序 for(int j=0; j<course[i].size() ; j++){ printf("%s\n",name[ course[i][j] ]); //输出学生姓名 } } system("pause"); return 0; }