Datahub
数据改变生活

数字盒子

发表时间:2022-10-27 20:15

数字盒子

问题描述

你有一个盒子,你可以往里面放数,也可以从里面取出数。

初始时,盒子是空的,你会依次做 Q 个操作,操作分为两类:

1.插入操作:询问盒子中是否存在数 x,如果不存在则把数 x 丢到盒子里。

2.删除操作:询问盒子中是否存在数 x,如果存在则取 x。

对于每个操作,你需要输出是否成功插入或删除。

输入

第一行一个正整数 Q,表示操作个数。

接下来 Q 行依次描述每个操作。每行 2 个用空格隔开的非负整数 op,x 描述一个操作: op 表示操作类型,op=1 则表示这是一个插入操作,op=2 则表示这是一个删除操作;x 的意义与操作类型有关,具体见题目描述。

按顺序对所有操作输出,对于每个操作输出一行,如果成功则输出“Succeeded”(不含引号),如果失败则输出“Failed”(不含引号)。

样例输入

6

1100

1100

2100

1200

2100

2200

样例输

数据范围

对于 60% 的数据,保证 x<10^5。

对于 100% 的数据,保证 x<10^18,Q≤5*10^5。

对于所有数据,保证 op∈{1,2}。时间限制:10 sec

空间限制:256 MB

提示

[对于 x 较小的情况,我们只需要用数组记录每个数是否在盒子里即可。]

[对于 x 较大的情况,我们可不可以用什么方法把它们“变小”呢?可以想想哈希表哦!]

代码

#include<iostream> #include<unordered_map> #include<string> #include<string.h> using namespace std;

int main()

{

unordered_map<string,int> HashMap_0;

unordered_map<string, int> ::iterator iter;

int n;

cin >> n;

string* str=new string[n];//用于存储输出的Succeeded或Failed

int choic;//用于选择功能

string key;

for (int i = 0; i < n; i++)

{

cin >> choic;

if (choic == 1)//向map中插入key

{

getline(cin, key);//获取输入的字符串

iter = HashMap_0.find(key);//查找map中是否存在相同的key

if (iter != HashMap_0.end())//若存在相同的key则不进行操作并返回Failed

{

str[i] = "Failed";

}

else//若不存在相同的key则放入并提示Succeeded

{

HashMap_0.emplace(key, 1);

str[i] = "Succeeded";

}

}

else if(choic == 2)//从map中删除key

{

getline(cin, key);//获取输入的字符串

iter = HashMap_0.find(key);//查找map中是否存在相同的key

if (iter != HashMap_0.end())//若存在相同的key则进行删除并返回Succeeded

{

HashMap_0.erase(iter);

str[i] = "Succeeded";

}

else//若不存在相同的key则返回Failed

{

str[i] = "Failed";

}

}

}

for (int i = 0; i < n; i++)

{

cout << str[i] << endl;

}

return 0;

}


上一篇重编码
文章分类: 数据结构例题
分享到:
QQ:258506508                                     联系电话:020-000000    000-000000                                   联系邮箱:xxx@.co.m                                     联系地址:XXX省XXX市XXX县XXX路