问题 A: Course List for Student (25)(PAT A1039)C++map解法
思路:把姓名字符串映射到vector
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
bool cmp(int a,int b){
return a<b;
}
int main(){
//cin.tie(0);cout.tie(0);
ios::sync_with_stdio(false); //加速代码
int n,k;
string name;
int lesson,num;
map<string,vector<int> > studentmap; //字符串映射到数组容器
while(cin>>n>>k){
vector<string> names; //字符串容器用来接收最后一行输入
while(k--){
cin>>lesson>>num; //输入课程序号和该课程人数
for(int i=0;i<num;i++){
cin>>name;
if(studentmap.count(name)==0){ //若map里没有这个名字
studentmap[name].push_back(lesson); //建立一个key,并把当前课程序号存进去
}
else studentmap[name].push_back(lesson); //若有则只存课程序号
}
}
for(int i=0;i<n;i++){
cin>>name;
names.push_back(name); //接收全部姓名
sort(studentmap[name].begin(),studentmap[name].end(),cmp); //给每一个人的课程序号进行排序
}
for(int i=0;i<n;i++){ //输出
cout<<names[i]<<' '<<studentmap[names[i]].size();
for(int j=0;j<studentmap[names[i]].size();j++){
cout<<' '<<studentmap.find(names[i])->second[j];
}
cout<<'\n';
}
studentmap.clear();
}
return 0;
}
评测结果:
###感谢seimei cyx,就看了一眼map恍然大悟