• PTA 习题集5-18 打印选课学生名单(哈希)


    假设全校有最多40000名学生和最多2500门课程。现给出每个学生的选课清单,要求输出每门课的选课学生名单。

    输入格式:

    输入的第一行是两个正整数:N(≤40000),为全校学生总数;K(≤2500),为总课程数。此后N行,每行包括一个学生姓名(3个大写英文字母+1位数字)、一个正整数C(≤20)代表该生所选的课程门数、随后是C个课程编号。简单起见,课程从1到K编号。

    输出格式:

    顺序输出课程1到K的选课学生名单。格式为:对每一门课,首先在一行中输出课程编号和选课学生总数(之间用空格分隔),之后在第二行按字典序输出学生名单,每个学生名字占一行。

    输入样例:

    10 5
    ZOE1 2 4 5
    ANN0 3 5 2 1
    BOB5 5 3 4 2 1 5
    JOE4 1 2
    JAY9 4 1 2 5 4
    FRA8 3 4 2 5
    DON2 2 4 5
    AMY7 1 5
    KAT3 3 5 4 2
    LOR6 4 2 4 1 5
    

    输出样例:

    1 4
    ANN0
    BOB5
    JAY9
    LOR6
    2 7
    ANN0
    BOB5
    FRA8
    JAY9
    JOE4
    KAT3
    LOR6
    3 1
    BOB5
    4 7
    BOB5
    DON2
    FRA8
    JAY9
    KAT3
    LOR6
    ZOE1
    5 9
    AMY7
    ANN0
    BOB5
    DON2
    FRA8
    JAY9
    KAT3
    LOR6
    ZOE1

    题意

    如上

    题解

    哈希AAA0--ZZZ9 总个数26*26*26*10,暴力的话用sort比较会超时

    代码

     1 #include<stdio.h>
     2 #include<algorithm>
     3 #include<vector>
     4 using namespace std;
     5 
     6 vector<int> vec[2501];
     7 int main(){
     8     int n,k,c,cla,len[2501]={0};
     9     char a[5];
    10     scanf("%d%d",&n,&k);
    11     for(int i=1;i<=n;++i){
    12         scanf("%s%d",a,&c);
    13         int N=(a[0]-'A')*6760+(a[1]-'A')*260+(a[2]-'A')*10+(a[3]-'0');
    14         for(int j=1;j<=c;++j){
    15             scanf("%d",&cla);
    16             vec[cla].push_back(N);
    17             ++len[cla];
    18         }
    19     }
    20     for(int i=1;i<=k;++i){
    21         sort(vec[i].begin(),vec[i].end());
    22         printf("%d %d
    ",i,len[i]);
    23         for(vector<int>::iterator it=vec[i].begin();it!=vec[i].end();++it){
    24             int a1,a2,a3,a4;
    25             a1=*it/6760;
    26             a2=(*it-a1*6760)/260;
    27             a3=(*it-a1*6760-a2*260)/10;
    28             a4=*it%10;
    29             printf("%c%c%c%C
    ",a1+'A',a2+'A',a3+'A',a4+'0');
    30         }
    31     }
    32     return 0;
    33 }
  • 相关阅读:
    Spring入门学习(一)
    Debian环境下vi设置
    Debian 环境下安装Tomcat记录
    Debian安装记录
    [原]Fedora 20的yum配置
    vue中slot以及mate的用法
    Express+Nodejs 下的登录拦截实现
    Node.js 常用Mongoose方法
    Node.js常用express方法
    node、Mongo项目如何前后端分离提供接口给前端
  • 原文地址:https://www.cnblogs.com/taozi1115402474/p/8350909.html
Copyright © 2020-2023  润新知