用C++Write a program to complete the following command: new id - create a specified sequence of Numbers for id (id < 200000) Add id num - to join the sequence of Numbers for id integer num merge id1 id2 - merger sequence number of id1 and id2, and make id2 empty unique id - remove repetitive element in the sequence id out id - from small to large, output the elements of sequence of Numbers for ids separated by Spaces Input The First Line is n which mean the number of the Command (n <= 200000). The next n lines are correct Command. You don't have to worry wrong input and id is int. Output Then output according the requirements.
时间: 2024-02-14 18:16:07 浏览: 113
MIL-STD-188-114A.021120.PDF
5星 · 资源好评率100%
以下是用C++编写的程序,实现上述命令功能:
```c++
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <unordered_map>
using namespace std;
unordered_map<int, vector<int>> seqs; // 用哈希表存储每个id对应的序列
set<int> unique_nums; // 用set存储去重后的数字
void create(int id)
{
vector<int> seq;
for (int i = 1; i <= id; ++i) {
seq.push_back(i);
}
seqs[id] = seq;
}
void add(int id, int num)
{
seqs[id].push_back(num);
}
void merge(int id1, int id2)
{
auto& seq1 = seqs[id1];
auto& seq2 = seqs[id2];
for (auto num : seq2) {
seq1.push_back(num);
}
seq2.clear();
}
void unique(int id)
{
auto& seq = seqs[id];
unique_nums.clear();
for (auto num : seq) {
unique_nums.insert(num);
}
seq.clear();
for (auto num : unique_nums) {
seq.push_back(num);
}
}
void out(int id)
{
auto& seq = seqs[id];
sort(seq.begin(), seq.end());
for (auto num : seq) {
cout << num << " ";
}
cout << endl;
}
int main()
{
int n;
cin >> n;
while (n--) {
string cmd;
cin >> cmd;
if (cmd == "new") {
int id;
cin >> id;
create(id);
}
else if (cmd == "add") {
int id, num;
cin >> id >> num;
add(id, num);
}
else if (cmd == "merge") {
int id1, id2;
cin >> id1 >> id2;
merge(id1, id2);
}
else if (cmd == "unique") {
int id;
cin >> id;
unique(id);
}
else if (cmd == "out") {
int id;
cin >> id;
out(id);
}
}
return 0;
}
```
程序思路:
- 用unordered_map存储每个id对应的序列,用set存储去重后的数字。
- 对于每个命令,根据命令类型执行相应的操作。
- 对于“create”命令,创建一个长度为id的序列。
- 对于“add”命令,将数字num添加到id对应的序列中。
- 对于“merge”命令,将id2对应的序列合并到id1对应的序列中。
- 对于“unique”命令,对id对应的序列进行去重。
- 对于“out”命令,从小到大输出id对应的序列中的数字,数字之间用空格隔开。
注意事项:
- 由于id的范围是小于200000的整数,因此可以直接使用vector存储每个id对应的序列,而无需使用链表等动态数据结构。
- 由于输入命令没有错误,因此可以直接使用cin读取命令和参数,而无需使用getline等函数进行处理。
阅读全文