首页 > 代码库 > PAT甲题题解-1039. Course List for Student (25)-建立映射+vector
PAT甲题题解-1039. Course List for Student (25)-建立映射+vector
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~
http://www.cnblogs.com/chenxiwenruo/p/6789157.html
特别不喜欢那些随便转载别人的原创文章又不给出链接的
所以不准偷偷复制博主的博客噢~~
题意:给出要查询的n个学生,k个课程
接下来对于k门课,给出其id和学生数量,以及对应的学生名字
租后给出n个查询的学生名字,让你输出其选的课程数量和对应的课程id,id从小到大排序。
题目简单,然而建立映射的想法不错~~推荐
一开始发生段错误,才发现n的范围只是询问学生的范围
实际上学生最多会有200*2500=500000个
然而结果变成超时了,估计是map的原因
受启发,名字实际上是ABC+数字组成,所以可以根据这个来建立与id的映射关系
最多有26*26*26*10个学生。
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h> #include <cmath> #include <map> #include <vector> using namespace std; int n,k; map<string,int>name_id; vector<int> stu[26*26*26*10+5]; int getId(char*str){ int id=0; for(int i=0;i<3;i++){ id=id*26+str[i]-‘A‘; } id=id*10+str[3]-‘0‘; return id; } int main() { string name; char str[5]; int id,idx,num; int cnt=0; scanf("%d %d",&n,&k); for(int i=0;i<k;i++){ scanf("%d %d",&idx,&num); for(int j=0;j<num;j++){ scanf("%s",str); //name=str; //cin>>name; //if(name_id[name]==0){ // name_id[name]=++cnt; //} id=getId(str); //stu[name_id[name]].push_back(idx); stu[id].push_back(idx); } } for(int i=0;i<n;i++){ scanf("%s",str); //name=str; printf("%s",str); int id=getId(str); printf(" %lu",stu[id].size()); sort(stu[id].begin(),stu[id].end()); for(int j=0;j<stu[id].size();j++){ printf(" %d",stu[id][j]); } printf("\n"); } return 0; }
PAT甲题题解-1039. Course List for Student (25)-建立映射+vector
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。