POJ C++程序设计 编程题#1 List

编程题#1 List

来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)

注意: 总时间限制: 4000ms 内存限制: 65536kB

描述

写一个程序完成以下命令:

new id ——新建一个指定编号为id的序列(id<10000)

add id num——向编号为id的序列加入整数num

merge id1 id2——合并序列id1和id2中的数,并将id2清空

unique id——去掉序列id中重复的元素

out id ——从小到大输出编号为id的序列中的元素,以空格隔开

 

输入

第一行一个数n,表示有多少个命令( n<=200000)。以后n行每行一个命令。

 

输出

按题目要求输出。

样例输入

16
new 1
new 2
add 1 1
add 1 2
add 1 3
add 2 1
add 2 2
add 2 3
add 2 4
out 1
out 2
merge 1 2
out 1
out 2
unique 1
out 1

 

样例输出

1 2 3 
1 2 3 4
1 1 2 2 3 3 4

1 2 3 4

一开始怎么也通不过,但是自己测试答案是正确的,后来参考https://zmy.im/的作业,在“add”的处理上,也sort一下,就通过了,poj真是难以琢磨,我本以为每次输出再sort就行了。

 1 #include <iostream>
 2 #include <iterator>
 3 #include <list>
 4 #include <vector>
 5 using namespace std;
 6 list<int> & FindList(vector<list<int> > & l, int id) {
 7     int tmp = l.size();
 8     if (tmp> 0) {
 9         vector<list<int> >::iterator i;
10         i = l.begin();
11         return *(i + id - 1);
12     }
13 };
14 int main() {
15     int n;
16     cin>>n;
17     vector<list<int> > a;
18     for (int i = 0; i < n; ++i) {
19         string s;
20         cin >> s;
21         if (s == "new") {
22             int id;
23             cin >> id;
24             a.push_back(list<int>());
25         } else if (s == "add") {
26             int id, num;
27             cin >> id >> num;
28             list<int> &temp = FindList(a, id);
29             temp.push_back(num);
30             temp.sort();
31         } else if (s == "merge") {
32             int id1, id2;
33             cin >> id1 >> id2;
34             list<int> &temp1 = FindList(a, id1);;
35             list<int> &temp2 = FindList(a, id2);;
36             temp1.merge(temp2);
37         } else if (s == "unique") {
38             int id;
39             cin >> id;
40             list<int> &temp = FindList(a, id);
41             temp.unique();
42         } else if (s == "out") {
43             int id;
44             cin >> id;
45             list<int> &temp = FindList(a, id);
46             temp.sort();
47             if (temp.size() > 0) {
48                 list<int>::iterator i;
49                 for(i=temp.begin(); i != temp.end(); ++i) {
50                     cout << *i << " ";
51                 }
52             }
53             cout << endl;
54         }
55     }
56     return 0;
57 }
原文地址:https://www.cnblogs.com/dagon/p/4783513.html