【1047 25 模拟】 Student List for Course

传送门

题意

给出选课人数 \(n\) 和课程数目 \(k\),然后再给出每个人的 \(id\) 和选课数量 \(c\) ,最后输出所有课的编号和选课人数以及选课人的 \(id\) , \(id\) 按照字典序

数据范围

\(n\leq 40,000\)
\(k\leq 2,500\)
\(c\leq 20\)

题解

  • 输入输出流会超时
  • 利用将 string 转化为 \(char\) 数组的函数 str.c_str() 使用 printf 输出

Code

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,k; cin>>n>>k;
	vector<string>a[k+1];
	for(int i=0;i<n;i++){
		string name; int c;
		cin>>name>>c;
		for(int j=0;j<c;j++){
			int id; cin>>id;
			a[id].push_back(name);
		}
	}
	for(int i=1;i<=k;i++){
		printf("%d %d\n",i,a[i].size());
		sort(a[i].begin(),a[i].end());
		for(int j=0;j<a[i].size();j++)
			printf("%s\n",a[i][j].c_str());
	}
}
posted @ 2021-02-23 14:50  Hyx'  阅读(75)  评论(0编辑  收藏  举报