【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());
}
}