题解 AT3530 【Write and Erase】
rui_er
2019-05-01 19:39:03
刚刚看了下面的题解,貌似有桶排的有set的,那么我就要用map了!(连map都没人用吗?)
# 头文件
```cpp
#include <iostream>
#include <map>
using namespace std;
```
# 准备阶段——输入
```cpp
map<int, bool> have;
int n;
cin>>n;
int k;
for(int i=0;i<n;i++)
{
cin>>k;
//剩下的下一阶段介绍
}
```
have是一个以int类型为索引存储bool类型的map。
根据题意可以写出输入部分:输入询问个数n,再输入n个询问内容k。
# 判断出现与否
```cpp
for(int i=0;i<n;i++)
{
cin>>k;
if(have[k]) have.erase(k);//$
else have[k] = true;//%
}
```
其中$行表示,如果k出现过,就把它从have中删除;
%行表示,否则将它加入have中。
# 统计次数
```cpp
cout<<have.size()<<endl;
```
调用STL的统计大小的函数即可。
> 综合以上,得
```cpp
#include <iostream>
#include <map>
using namespace std;
map<int, bool> have;
int main()
{
int n;
cin>>n;
int k;
for(int i=0;i<n;i++)
{
cin>>k;
if(have[k]) have.erase(k);
else have[k] = true;
}
cout<<have.size()<<endl;
return 0;
}
```