• 1095 解码PAT准考证 (map不超时)


    PAT 准考证号由 4 部分组成:

    • 第 1 位是级别,即 T 代表顶级;A 代表甲级;B 代表乙级;
    • 第 2~4 位是考场编号,范围从 101 到 999;
    • 第 5~10 位是考试日期,格式为年、月、日顺次各占 2 位;
    • 最后 11~13 位是考生编号,范围从 000 到 999。

    现给定一系列考生的准考证号和他们的成绩,请你按照要求输出各种统计信息。

    输入格式:

    输入首先在一行中给出两个正整数 N(≤104)和 M(≤100),分别为考生人数和统计要求的个数。

    接下来 N 行,每行给出一个考生的准考证号和其分数(在区间 [0,100] 内的整数),其间以空格分隔。

    考生信息之后,再给出 M 行,每行给出一个统计要求,格式为:类型 指令,其中

    • 类型 为 1 表示要求按分数非升序输出某个指定级别的考生的成绩,对应的 指令 则给出代表指定级别的字母;
    • 类型 为 2 表示要求将某指定考场的考生人数和总分统计输出,对应的 指令 则给出指定考场的编号;
    • 类型 为 3 表示要求将某指定日期的考生人数分考场统计输出,对应的 指令 则给出指定日期,格式与准考证上日期相同。

    输出格式:

    对每项统计要求,首先在一行中输出 Case #: 要求,其中 # 是该项要求的编号,从 1 开始;要求 即复制输入给出的要求。随后输出相应的统计结果:

    • 类型 为 1 的指令,输出格式与输入的考生信息格式相同,即 准考证号 成绩。对于分数并列的考生,按其准考证号的字典序递增输出(题目保证无重复准考证号);
    • 类型 为 2 的指令,按 人数 总分 的格式输出;
    • 类型 为 3 的指令,输出按人数非递增顺序,格式为 考场编号 总人数。若人数并列则按考场编号递增顺序输出。

    如果查询结果为空,则输出 NA


    输入样例:

    1. 8 4
    2. B123180908127 99
    3. B102180908003 86
    4. A112180318002 98
    5. T107150310127 62
    6. A107180908108 100
    7. T123180908010 78
    8. B112160918035 88
    9. A107180908021 98
    10. 1 A
    11. 2 107
    12. 3 180908
    13. 2 999

    输出样例:

    1. Case 1: 1 A
    2. A107180908108 100
    3. A107180908021 98
    4. A112180318002 98
    5. Case 2: 2 107
    6. 3 260
    7. Case 3: 3 180908
    8. 107 2
    9. 123 2
    10. 102 1
    11. Case 4: 2 999
    12. NA

    考察 :  信息较复杂逻辑处理与排序

    注意 :  查询3日期的输出有前置0

    思路 :  map+map+map.......


    C/C++ 

    1. #include
    2. using namespace std;
    3. void input(int command); // 查询操作
    4. vectorint>> top[3]; // 各个级别储存 0-T,1-A,2-B
    5. map<int,pair<long,long>> room; // 考场号 -> 考场人数 and 总得分
    6. map<long,vector<int>> findRoom; // 日期 -> 该日期拥有的考场号
    7. maplong,int>,int> findNum; // 日期+考场号 -> 当天该考场人数
    8. bool cmp(const pairint>& x,const pairint>& y){ // 排序PAB各个级别的排名
    9. if(x.second!=y.second) return x.second>y.second;
    10. return x.first < y.first;
    11. }
    12. bool cmp1(pair<int,int> x,pair<int,int> y){ // 排序查询3操作
    13. if(x.second!=y.second) return x.second>y.second;
    14. return x.first < y.first;
    15. }
    16. int main()
    17. {
    18. string id;
    19. int N,M,n,roomId;
    20. cin >> N >> M;
    21. while (N--){
    22. cin >> id >> n;
    23. // 查询1 录入
    24. if(id[0]=='T') top[0].emplace_back(id,n);
    25. else if(id[0]=='A') top[1].emplace_back(id,n);
    26. else top[2].emplace_back(id,n);
    27. // 查询2 录入
    28. roomId = (id[1]-48)*100+(id[2]-48)*10+id[3]-48;
    29. room[roomId].first++;
    30. room[roomId].second+=n;
    31. // 查询3 录入
    32. long day = 0;
    33. for(int z=4;z<10;z++) day = day*10+id[z]-48;
    34. if(0==findNum[pair<long,int>(day,roomId)]++) findRoom[day].push_back(roomId);
    35. }
    36. for(auto & z : top) sort(z.begin(),z.end(),cmp);
    37. for(int z=1;z<=M;z++){
    38. cout << "Case " << z << ": ";
    39. cin >> n;
    40. input(n);
    41. }
    42. return 0;
    43. }
    44. void input(int command)
    45. {
    46. long day; // 数据读入使用
    47. char level; // 数据读入使用
    48. bool flag = true; // 判断有无输出
    49. if(command==1)
    50. {
    51. cin >> level; cout << command << " " << level << endl;
    52. day = level=='T'? 0 : level=='A'? 1 : 2;
    53. for(const auto& x:top[day]) cout << x.first << " " << x.second << endl;
    54. if(top[day].empty()) flag = false;
    55. }
    56. else if(command==2)
    57. {
    58. cin >> day; cout << command << " " << day << endl;
    59. if(room[day].first>0) cout << room[day].first << " " << room[day].second << endl;
    60. else flag = false;
    61. }
    62. else
    63. {
    64. cin >> day;
    65. printf("%ld %06ld\n",command,day);
    66. vectorint,int>> box;
    67. for(int x:findRoom[day]){
    68. box.emplace_back(x,findNum[pair<long,int>(day,x)]);
    69. }
    70. sort(box.begin(),box.end(),cmp1);
    71. if(box.empty()) flag = false;
    72. else for(auto x:box) cout << x.first << " " << x.second << endl;
    73. }
    74. if(!flag) cout << "NA" << endl;
    75. }


  • 相关阅读:
    算法分析基础
    jwt->jwt简介,jwt工具类,jwt集进成spa项目
    torch.mm
    Ganglia python metric扩展
    锐捷MPLS跨域方案C1实验配置
    2013年武汉某校848数据结构真题
    C语言练习——上三角矩阵
    Rust错误处理和Result枚举类异常错误传递
    22-07-05 七牛云存储图片、用户头像上传
    python如何进行量化交易api?
  • 原文地址:https://blog.csdn.net/daybreak_alonely/article/details/126268224