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;
}
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;
}
相关文章推荐
- libdvbpsi源码分析(四)PAT表解析/重建
- PAT配置
- 什么是端口复用动态地址转换(PAT) 介绍配置实例
- MikroTik layer7-protocol
- PAT是如何工作的
- PAT 乙级题:1002. 写出这个数 (20)
- PAT (Advanced Level) Practise 1001-1010
- 数据结构学习与实验指导(一)
- PAT Basic Level 1001-1010解题报告
- PAT 数素数
- PAT 福尔摩斯的约会
- PAT 德才论
- PAT 月饼
- 1001. 害死人不偿命的(3n+1)猜想
- 1002. 写出这个数
- 1032. 挖掘机技术哪家强
- 1001. 害死人不偿命的(3n+1)猜想 (PAT basic)
- 1002. 写出这个数(PAT Basic)
- 1004. 成绩排名(PAT Basic)
- 1006. 换个格式输出整数(PAT Basic)