PAT_B_1095_Java(25分)
思路:根据要求输出的三个指令,选择数据的存储方式。
指令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分)相关推荐
- 12门课100分直博清华!这份成绩单冲上热搜,但学霸小伙也曾考过25分
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 金磊 明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一 ...
- PTA 7-3 旅游规划 (25分)(双权值Dijkstra最短路)
7-3 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路 ...
- PTA 03-树1 树的同构 (25分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/711 5-3 树的同构 (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右 ...
- 【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 ...
- 【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 ...
- 【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-29 修理牧场 (25 分)
7-29 修理牧场 (25 分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L i 个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L ...
- 7-18 银行业务队列简单模拟 (25 分)
7-18 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达 ...
- 5-35 城市间紧急救援 (25分) pat 数据结构
题目连接 https://pta.patest.cn/pta/test/15/exam/4/question/862 5-35 城市间紧急救援 (25分) 作为一个城市的应急救援队伍的负责人,你有 ...
最新文章
- java session缓存_Java服务端采用Session的缓存oauth2.0授权用户信息
- 我写了一个脚本,可在“任意”服务器上执行命令!
- 巨变的时代、人工智能AI带来颠覆性的影响、技术十大趋势
- opencv 图像阴影检测
- matlab vector用法,C++ vector 用法汇总
- java的知识点30——设计模式
- 【洛谷 - 快来签到】(数学,公式,溢出爆longlong的处理)
- python display函数_【python】pandas display选项
- css3缩放 transform: scale() 使用缩放之后顶点对齐问题
- 腾讯地图拾取坐标html,腾讯地图Api 实现拾取坐标功能示例
- 【java笔记】Properties类
- A除B求商(PAT20)高精度/低精度
- 使用JDBC编程的问题总结
- 获取中国气象台卫星云图
- java excel下拉框_Java设置Excel下拉列表
- 7-4 厘米换算英尺英寸
- 怎么把图片格式转换成PDF呢?
- 论文精度MISC: A MIxed Strategy-Aware Model Integrating COMET for Emotional Support Conversation
- mysql小计_Mysql必读用SQL实现统计报表中的小计与合计的方法详解
- Java 从虚拟机层面看程序代码是怎么运行起来的
热门文章
- ssh汉字乱码怎么办_[转]SSH Secure Shell Client中文乱码的解决办法
- 软件开发计划_敏捷软件开发实践:估算与计划读书笔记123第21章 关于计划的沟通...
- python语言有哪两个系列_(转)Python学习笔记系列——Python是一种纯粹的语言
- Storyboard的简单使用
- 别给小偷可乘之机!日本山形县警方呼吁民众“锁门”
- mac版本查看日志命令
- linux下的crontab
- 从测试角度对测试驱动开发的思考【转】
- SQL Server 将一个表中字段的值复制到另一个表的字段中
- 停电造成的主板BIOS维修