1.不能使用map映射学生姓名和学生编号,使用最后一组数据可能超时。
2.不能直接开二维数组存储学生所选课程,否则会导致内存超限。
解决方法:
1.采用hash的方法完成姓名和编号的映射。
2.采用vector存储学生所选课程。(vector使用方法请点击超链)
代码如下:
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const int N = 40010;
const int M = 26 * 26 * 26 * 10 + 1;
vector<int> selectcourse[M];
//名字hash
int getid(char name[]){
int id = 0;
for(int i = 0;i < 3;i++){
id = id * 26 + (name[i] - 'A');
}
id = id * 10 + (name[3] - '0');
return id;
}
int main(){
char name[5];
int n,k;
scanf("%d%d",&n,&k);
for(int i = 0;i < k;i++){
int course,x;
scanf("%d%d",&course,&x);
for(int j = 0; j < x;j++){
scanf("%s",name);
int id = getid(name);
selectcourse[id].push_back(course);
}
}
for(int i = 0; i < n;i++){
scanf("%s",name);
int id = getid(name);
sort(selectcourse[id].begin(),selectcourse[id].end());
printf("%s %d",name,selectcourse[id].size());
for(int j = 0;j < selectcourse[id].size();j++){
printf(" %d",selectcourse[id][j]);
}
printf("\n");
}
return 0;
}