思路:根据要求输出的三个指令,选择数据的存储方式。
  指令1:1.可以通过map容器存储,map<string,vector >
    键值string为(‘A’、‘B’、‘T’) studata数据类型存储学生准考证号和成绩
      2.也可以直接通过三个vector存储
               vector levelTStu;
            vector levelAStu;
            vector levelBStu;
  指令2:可直接用两个数组存储,examRoomCnt[1000] = {0},examRoomResult[1000] = {0}
      分别存储考场人数和考场总成绩。(也可用map容器)
  指令3:用双重unordered_map图存储,相对map来说,查询速度比较块。
    unordered_map<int, unordered_map<int, examroom> > dateExamData;
    第一个int为六位数的日期,也可以用string类型;
    第二个int为考场号,统计相应考场学生人数时使用;
    examroom存储考场号和考场人数。
这样存储后,输出就很简单了,只需要按照要求进行一定的排序后,就可以直接输出。

#include <iostream>
#include <stdio.h>
#include <vector>
#include <unordered_map>
#include <string>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
using namespace std;
/*
1.Level --> id/score sortsolve:vector + struct -> sort -> output
2.ExamRoom --> peopleCnt/scoreSumsolve:Array + int -> plus
3.Date --> ExamRoom/people + sortsolve:map + int + vector
*/
typedef struct STUDATA
{char id[13];int result;
}studata;
typedef struct EXAMROOMID
{int id;int cnt=0;
}examroom;
bool CmpStuData(studata a, studata b)
{if(a.result != b.result){return a.result > b.result;}else if(a.id != b.id){return strcmp(a.id, b.id) < 0;}return false;
}
bool CmpExamRoom(examroom a, examroom b)
{if(a.cnt != b.cnt){return a.cnt > b.cnt;}else if(a.id != b.id){return a.id < b.id;}return false;
}
int main()
{//指令1数据存储vector<studata> levelTStu;vector<studata> levelAStu;vector<studata> levelBStu;//指令2数据存储int N,M,examRoomCnt[1000] = {0},examRoomResult[1000] = {0};//指令3数据存储unordered_map<int, unordered_map<int, examroom> > dateExamData;studata tempStuData;examroom tempExamroom;char examRoomId[5] = {0};char examDateStr[7] = {0};scanf("%d %d", &N, &M);//数据读入while(N--){scanf("%s",tempStuData.id);scanf("%d", &tempStuData.result);//指令1if(tempStuData.id[0] == 'A'){levelAStu.push_back(tempStuData);}else if(tempStuData.id[0] == 'B'){levelBStu.push_back(tempStuData);}else{levelTStu.push_back(tempStuData);}//指令2strncpy(examRoomId, tempStuData.id + 1, 3);int examRoom = atoi(examRoomId);++ examRoomCnt[examRoom];examRoomResult[examRoom] += tempStuData.result;//指令3strncpy(examDateStr, tempStuData.id + 4, 6);int examDate = atoi(examDateStr);dateExamData[examDate][examRoom].id = examRoom;++ dateExamData[examDate][examRoom].cnt;}// cout << "Data entered over" << endl;int tempCmd;char cmdStr[7] = {0};int cmdCnt = 0;//指令读入while(M--){memset(cmdStr,0,sizeof(cmdStr));scanf("%d %s", &tempCmd, cmdStr);++ cmdCnt;printf("Case %d: %d %s\n", cmdCnt, tempCmd, cmdStr);bool outputFlag = false;if(tempCmd == 1){if(cmdStr[0] == 'A'){sort(levelAStu.begin(), levelAStu.end(), CmpStuData);for(int i = 0; i < levelAStu.size(); ++ i){outputFlag = true;printf("%s %d\n", levelAStu[i].id, levelAStu[i].result);}}else if(cmdStr[0] == 'T'){sort(levelTStu.begin(), levelTStu.end(), CmpStuData);for(int i = 0; i < levelTStu.size(); ++ i){outputFlag = true;printf("%s %d\n", levelTStu[i].id, levelTStu[i].result);}}else{sort(levelBStu.begin(), levelBStu.end(), CmpStuData);for(int i = 0; i < levelBStu.size(); ++ i){outputFlag = true;printf("%s %d\n", levelBStu[i].id, levelBStu[i].result);}}}else if(tempCmd == 2){strncpy(examRoomId,cmdStr,3);int examRoom = atoi(examRoomId);if(examRoomCnt[examRoom] > 0){outputFlag = true;printf("%d %d\n", examRoomCnt[examRoom], examRoomResult[examRoom]);}}else if(tempCmd == 3){strncpy(examDateStr,cmdStr,6);int examDate = atoi(examDateStr);unordered_map<int, examroom> tempDateExamData = dateExamData[examDate];examroom tempExamroomArray[tempDateExamData.size()];if(tempDateExamData.size() > 0){outputFlag = true;int i = -1;for(auto it = tempDateExamData.begin(); it != tempDateExamData.end(); ++ it){tempExamroomArray[++i] = it->second;}sort(tempExamroomArray, tempExamroomArray+tempDateExamData.size(), CmpExamRoom);for(i = 0; i < tempDateExamData.size(); ++ i){printf("%d %d\n", tempExamroomArray[i].id, tempExamroomArray[i].cnt);}}}if(!outputFlag){printf("NA\n");}}return 0;
}

PAT_B_1095_Java(25分)相关推荐

  1. 12门课100分直博清华!这份成绩单冲上热搜,但学霸小伙也曾考过25分

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 金磊 明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一 ...

  2. PTA 7-3 旅游规划 (25分)(双权值Dijkstra最短路)

    7-3 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路 ...

  3. PTA 03-树1 树的同构 (25分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/711 5-3 树的同构   (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右 ...

  4. 【PAT (Advanced Level) Practice】1051 Pop Sequence (25 分)

    1051 Pop Sequence (25 分) Given a stack which can keep M numbers at most. Push N numbers in the order ...

  5. 【PAT (Advanced Level) Practice】1093 Count PAT‘s (25 分)

    1093 Count PAT's (25 分) The string APPAPT contains two PAT's as substrings. The first one is formed ...

  6. 【PAT (Advanced Level) Practice】1149 Dangerous Goods Packaging (25 分)

    1149 Dangerous Goods Packaging (25 分) When shipping goods with containers, we have to be careful not ...

  7. 7-29 修理牧场 (25 分)

    7-29 修理牧场 (25 分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L ​i ​​ 个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L ...

  8. 7-18 银行业务队列简单模拟 (25 分)

    7-18 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达 ...

  9. 5-35 城市间紧急救援 (25分) pat 数据结构

    题目连接 https://pta.patest.cn/pta/test/15/exam/4/question/862 5-35 城市间紧急救援   (25分) 作为一个城市的应急救援队伍的负责人,你有 ...

最新文章

  1. java session缓存_Java服务端采用Session的缓存oauth2.0授权用户信息
  2. 我写了一个脚本,可在“任意”服务器上执行命令!
  3. 巨变的时代、人工智能AI带来颠覆性的影响、技术十大趋势
  4. opencv 图像阴影检测
  5. matlab vector用法,C++ vector 用法汇总
  6. java的知识点30——设计模式
  7. 【洛谷 - 快来签到】(数学,公式,溢出爆longlong的处理)
  8. python display函数_【python】pandas display选项
  9. css3缩放 transform: scale() 使用缩放之后顶点对齐问题
  10. 腾讯地图拾取坐标html,腾讯地图Api 实现拾取坐标功能示例
  11. 【java笔记】Properties类
  12. A除B求商(PAT20)高精度/低精度
  13. 使用JDBC编程的问题总结
  14. 获取中国气象台卫星云图
  15. java excel下拉框_Java设置Excel下拉列表
  16. 7-4 厘米换算英尺英寸
  17. 怎么把图片格式转换成PDF呢?
  18. 论文精度MISC: A MIxed Strategy-Aware Model Integrating COMET for Emotional Support Conversation
  19. mysql小计_Mysql必读用SQL实现统计报表中的小计与合计的方法详解
  20. Java 从虚拟机层面看程序代码是怎么运行起来的

热门文章

  1. ssh汉字乱码怎么办_[转]SSH Secure Shell Client中文乱码的解决办法
  2. 软件开发计划_敏捷软件开发实践:估算与计划读书笔记123第21章 关于计划的沟通...
  3. python语言有哪两个系列_(转)Python学习笔记系列——Python是一种纯粹的语言
  4. Storyboard的简单使用
  5. 别给小偷可乘之机!日本山形县警方呼吁民众“锁门”
  6. mac版本查看日志命令
  7. linux下的crontab
  8. 从测试角度对测试驱动开发的思考【转】
  9. SQL Server 将一个表中字段的值复制到另一个表的字段中
  10. 停电造成的主板BIOS维修