您的位置:首页 > 其它

1039. Course List for Student (25)

2016-07-09 10:17 441 查看
IDEA

1.很自然的思路是设计map<string,vector<int> > record; 但是由于string的各种操作,使得最后一个case超时;

2.我们观察到文中描述name右3个大写字母和一位数字组成,即最多有MAX=26*26*26*10个学生。需要做name到数字id之间的映射,

id=(name[0]-'A')*26*26*10+(name[1]-'A')*26*10+(name[2]-'A')*10+name[3]-'0'

3.用vector<int> stu[MAX]存储即可



CODE

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
#include<fstream>
using namespace std;
#define MAX 26*26*26*10
vector<int> stu[MAX];
int hashName(char *name){
return (name[0]-'A')*26*26*10+(name[1]-'A')*26*10+(name[2]-'A')*10+name[3]-'0';
}
int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
#endif

int n,k;
scanf("%d%d",&n,&k);

while(k--){
int course,numStu;
scanf("%d%d",&course,&numStu);
while(numStu--){
char name[5];
scanf("%s",name);
int stu_id=hashName(name);
stu[stu_id].push_back(course);
}
}
for(int i=0;i<n;i++){
char query[5];
scanf("%s",query);

printf("%s",query);
int stu_id=hashName(query);
printf(" %d",stu[stu_id].size());

sort(stu[stu_id].begin(),stu[stu_id].end());

for(int j=0;j<stu[stu_id].size();j++){
printf(" %d",stu[stu_id][j]);
}
printf("\n");
}

#ifndef ONLINE_JUDGE
fclose(stdin);
#endif
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息