【题解】P5266 学籍管理:思路分享
P5266 【深基17.例6】学籍管理算法题思路分享文章目录P5266 【深基17.例6】学籍管理题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1解题思路题目描述您要设计一个学籍管理系统最开始学籍数据是空的然后该系统能够支持下面的操作不超过10 5 10^5105条插入与修改格式1 NAME SCORE在系统中插入姓名为NAME \texttt{NAME}NAME(由字母和数字组成不超过20 2020个字符的字符串区分大小写)分数为SCORE \texttt{SCORE}SCORE0 SCORE 2 31 0\texttt{SCORE}2^{31}0SCORE231 的学生。如果已经有同名的学生则更新这名学生的成绩为SCORE \texttt{SCORE}SCORE。如果成功插入或者修改则输出OK。查询格式2 NAME在系统中查询姓名为NAME \texttt{NAME}NAME的学生的成绩。如果没能找到这名学生则输出Not found否则输出该生成绩。删除格式3 NAME在系统中删除姓名为NAME \texttt{NAME}NAME的学生信息。如果没能找到这名学生则输出Not found否则输出Deleted successfully。汇总格式4输出系统中学生数量。输入格式第一行输入一个正整数Q QQ1 ≤ Q ≤ 10 5 1 \le Q \le 10^51≤Q≤105表示操作数量。接下来Q QQ行每行先输入一个正整数o p opopo p ∈ [ 1 , 4 ] op \in [1,4]op∈[1,4]表示操作种类。接着如果o p 1 op 1op1则再输入一个字符串NAME \texttt{NAME}NAME以及一个正整数SCORE \texttt{SCORE}SCORE含义见题目描述。如果o p 2 op 2op2则再输入一个字符串NAME \texttt{NAME}NAME含义见题目描述。如果o p 3 op 3op3则再输入一个字符串NAME \texttt{NAME}NAME含义见题目描述。如果o p 4 op 4op4则无需再输入其他内容。输出格式共输出Q QQ行每行输出一个字符串或正整数为对应操作的处理结果具体含义见题目描述。输入输出样例 #1输入 #15 1 lxl 10 2 lxl 3 lxl 2 lxl 4输出 #1OK 10 Deleted successfully Not found 0解题思路这个题目非常常规且简单的模拟题使用map这个STL就能实现增删改查。因此顺着题目意思写代码即可。完整代码如下// P5266 【深基17.例6】学籍管理// 用 map 做键值映射键为姓名值为分数#includebits/stdc.husingnamespacestd;intmain(){// 操作条数intq;cinq;// 姓名 - 分数底层是平衡树单次查找 O(log n)mapstring,intmp;while(q--){// 本次操作的类型intop;cinop;// 1 录入 2 查询 3 删除 4 统计人数if(op1){// 读入姓名与分数string s;intscore;cinsscore;// operator[] 本身就能插入或覆盖同名以最新分数为准mp[s]score;coutOK\n;}if(op2){// 按姓名查找string s;cins;autoitmp.find(s);if(it!mp.end()){// 命中second 即对应分数coutit-second\n;}else{// 未命中表里没有这条记录coutNot found\n;}}if(op3){// 按姓名删除string s;cins;autoitmp.find(s);if(it!mp.end()){// 迭代器已经拿到直接 erase省一次按键查找mp.erase(it);coutDeleted successfully\n;}else{// 记录不存在自然删不掉coutNot found\n;}}if(op4){// 当前记录条数coutmp.size()\n;}}return0;}