首页 > 代码库 > Open Judge 3339 List

Open Judge 3339 List

3339:List

总时间限制: 
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行每行一个命令。
输出
按题目要求输出。
样例输入
16new 1new 2add 1 1add 1 2add 1 3add 2 1add 2 2add 2 3add 2 4out 1out 2merge 1 2out 1out 2unique 1out 1
样例输出
1 2 3 1 2 3 41 1 2 2 3 3 41 2 3 4
 1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 #include <list> 5 #include <map> 6 using namespace std; 7  8 map<int,list<int> > m; 9 10 int n,x,y;11 char op[10000];12 int main(){13     scanf("%d",&n);14     while(n--){15         scanf("%s",op);16         if(strcmp(op,"new")==0){17             scanf("%d",&x);18             m.insert(map<int,list<int> >::value_type(x,list<int>()));19         }20         if(strcmp(op,"add")==0){21             scanf("%d%d",&x,&y);22             m[x].push_back(y);23         }24         if(strcmp(op,"merge")==0){25             scanf("%d%d",&x,&y);26             m[x].merge(m[y]);27             //m[y].clear();28         }29         if(strcmp(op,"unique")==0){30             scanf("%d",&x);31             m[x].sort();32             m[x].unique();33         }34         if(strcmp(op,"out")==0){35             scanf("%d",&x);36             m[x].sort();37             list<int>::iterator it;38             for(it=m[x].begin();it!=m[x].end();it++){39                 printf("%d ",*it);40             }41             printf("\n");42         }43     }44 }

既然还有list这STL,长见识了真是~~唉~~

Open Judge 3339 List