洛谷P5266 【深基17.例6】学籍管理(c嘎嘎)
题目链接:P5266 【深基17.例6】学籍管理 - 洛谷 | 计算机科学教育新生态
题目难度:普及/提高
解题思路:本题会map就是一道简单题,也可以当作map的练手题帮助熟悉map的操作
本题需要用到map的以下几个操作:
a.count(x) | 判断x为下标的元素是不是在a中,是就返回1,不是就返回0 |
a.erase(x) | 删除a中x为下标的元素 |
a.size() | 返回a中元素的个数 |
a.clear() | 清空a |
下面直接奉上代码部分:
#include<bits/stdc++.h>
using namespace std;
#define _for(i,a,b) for(int i=(a); i<(b); i++)
#define _rep(i,a,b) for(int i=(a); i<=(b); i++)
typedef long long ll;
const int N = 1010;
map<string,int>mp;//定义一个string(姓名)到int(分数)的map
string name;//学生姓名
int score; //学生分数
int n,op; //操作种类
int read()//快读函数
{
int k=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
k=k*10+ch-'0';
ch=getchar();
}
return k*f;
}
int main()
{
// ios::sync_with_stdio(false);
// cin.tie(nullptr),cout.tie(nullptr);
n = read();
while(n--)
{
op = read();
if(op == 1)//操作1
{
cin >> name,score = read();
mp[name] = score;//map的对应关系,把名字和分数对应起来
puts("OK");
}
else if(op == 2)//操作2:查询学生
{
cin >> name;
if(!mp.count(name)) puts("Not found");//找不到
else cout<<mp[name]<<'\n';;//如果找得到输出对应的分数
}
else if(op == 3)//操作3:删除学生
{
cin >> name;
if(!mp.count(name)) puts("Not found");
else
{
mp.erase(name);
puts("Deleted successfully");//成功删除
}
}
else//操作4:学生人数
{
cout<<mp.size()<<'\n';
}
}
return 0;
}