问题描述
为了复习考研英语,yhf开始背单词。
yhf有一个笔记本,一开始是空的。当yhf遇到一个不认识的单词时,他会先查找笔记本,如果笔记本上没有,他就会先在互联网上查找这个单词,然后记在笔记本上。当yhf认为他已经熟记一个单词时,他会将这个单词在笔记本上擦掉(如果笔记本上没有就不用擦了)。yhf有时也会关心他的笔记本上记了多少单词,他会将笔记本上的单词按照字典序升序读一遍。
这天,yhf发现他的笔记本已经记满了单词,他决定用程序来实现笔记本的功能。但考虑到编写程序消耗的时间可以多背几千个单词,他决定把这个任务交给你。
输入格式
输入第一行包含一个整数 ,接下来有 行,每一行有一个整数 ,表示你的程序应执行哪种操作,具体如下
- ,后接一个单词,表示查找这个单词;如果笔记本中没有这个单词,则将单词写进笔记本
- ,后接一个单词,表示删除这个单词;如果笔记本中没有这个单词,则无需进行操作
- ,表示按字典序通读整个笔记本
输出格式
输出 行,每一行表示输入的操作对应的输出,具体如下
- ,如果笔记本中有这个单词,输出
found
,否则输出write
- ,如果笔记本中有这个单词,输出
erased
,否则输出not found
- ,在一行内按字典序升序输出所有单词,中间用空格隔开
样例输入
8
1 problem
1 problem
2 problem
1 problem
2 acm
1 pro
1 acm
3
样例输出
write
found
erased
write
not found
write
write
acm pro problem
评测用例规模与约定
对于60%的数据,。
对于100%的数据,,单词长度 且由小写字母构成。
保证操作3的次数不超过3次。
#include <bits/stdc++.h>
using namespace std;
set<string> s;
void op(const int& op, const string& w) {
switch (op) {
case 1:
if (s.find(w) == s.end()) {
printf("write\n");
s.emplace(w);
} else {
printf("found\n");
}
break;
case 2:
if (s.find(w) == s.end()) {
printf("not found\n");
} else {
printf("erased\n");
s.erase(w);
}
break;
case 3:
for (const string& i : s) {
cout << i << ' ';
}
printf("\n");
break;
default:
break;
}
}
int main() {
int m,p;
string w;
cin >> m;
for (int i = 0; i < m;++i){
cin >> p;
if(p!=3)
cin >> w;
op(p, w);
}
return 0;
}