PAT甲题题解-1039. Course List for Student (25)-建立映射+vector

Posted 辰曦~文若

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}
View Code

 

以上是关于PAT甲题题解-1039. Course List for Student (25)-建立映射+vector的主要内容,如果未能解决你的问题,请参考以下文章

浙大pat1039 Course List for Student(25 分)

PAT Advanced 1039 Course List for Student (25分) (STL)

PAT1039. Course List for Student (25)

PAT (Advanced Level) 1039. Course List for Student (25)

PAT 甲级 1039 Course List for Student (25 分)(字符串哈希,优先队列,没想到是哈希)*

PAT甲题题解-1052. Linked List Sorting (25)-排序