题解 AT3530 【Write and Erase】

rui_er

2019-05-01 19:39:03

Solution

刚刚看了下面的题解,貌似有桶排的有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; } ```