S:List
描述
写一个程序完成以下命令:
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
Approach #1:
#include<iostream>
#include<iterator>
#include<list>
#include<vector>
using namespace std;
list<int>& FindList(vector<list<int>>& l, int id) {
int tmp = l.size();
if (tmp > 0) {
vector<list<int>>::iterator i;
i = l.begin();
return *(i+id-1);
}
}; int main() {
int n;
cin >> n;
vector<list<int>> a;
for (int i = 0; i < n; ++i) {
string s;
cin >> s;
if (s == "new") {
int id;
cin >> id;
a.push_back(list<int>());
} else if (s == "add") {
int id, num;
cin >> id >> num;
list<int>& temp = FindList(a, id);
temp.push_back(num);
temp.sort();
} else if (s == "merge") {
int id1, id2;
cin >> id1 >> id2;
list<int>& temp1 = FindList(a, id1);
list<int>& temp2 = FindList(a, id2);
temp1.merge(temp2);
} else if (s == "unique") {
int id;
cin >> id;
list<int>& temp = FindList(a, id);
temp.unique();
} else if (s == "out") {
int id;
cin >> id;
list<int>& temp = FindList(a, id);
temp.sort();
if (temp.size() > 0) {
list<int>::iterator it;
for (it = temp.begin(); it != temp.end(); ++it) {
cout << *it << " ";
}
}
cout << endl;
}
}
return 0;
}
Analysis:
自己刚开始想的使用map来做这道题,样例通过了,但是提交的时候还是WA。参考了一下别人的代码交了上去。
随机推荐
- 深入探究jvm之类装载器
			一.class装载验证流程 1.加载 1).取得类的二进制流. 2).转为方法区数据结构. 3).在Java堆中生成对应的java.lang.Class对象. 2.链接--验证(目的:保证Class流 ... 
- ie8、9   post 跨域
			//显示浮层postAjax:function(url,param,callback){ var loadScore = layer_.load(1,{shade: [0.8,'#393D49']}) ... 
- 分别用js和css实现瀑布流
			下午查找了瀑布流的相关原理,找了一些css3实现的还有js实现的,最后总结了一些比较简单的,易懂的整理起来 1.css3实现 只要运用到 column-count分列 column-width固 ... 
- Apache Hive (一)Hive初识
			转自:https://www.cnblogs.com/qingyunzong/p/8707885.html Hive 简介 什么是Hive 1.Hive 由 Facebook 实现并开源 2.是基于 ... 
- JS中深拷贝数组、对象、对象数组方法(转载)
			我们在JS程序中需要进行频繁的变量赋值运算,对于字符串.布尔值等可直接使用赋值运算符 “=” 即可,但是对于数组.对象.对象数组的拷贝,我们需要理解更多的内容. 首先,我们需要了解JS的浅拷贝与深拷贝 ... 
- html学习代码
			<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ... 
- centos6.5系统hadoop2.7安装sqoop
			一.sqoop简介 Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ... 
- SQL 数据库 学习 003 什么是数据库? 为什么需要数据库?是不是所有的软件都是用Sql Server?
			什么是数据库? 为什么需要数据库? 是不是所有的软件都是用Sql Server? 我的电脑系统: Windows 10 64位 使用的SQL Server软件: SQL Server 2014 Exp ... 
- scanf是怎么从标准输入读取数据的
			scanf是从标准输入读取数据的 假设现在标准输入中的数据是123456 int a; 而我scanf("%d",&a); 会把123456转化为数字然后存入到a中. 如果 ... 
- Openssl ecparam命令
			一.简介 椭圆曲线密钥参数生成及操作 二.语法 openssl ecparam [-inform DER|PEM] [-outform DER|PEM] [-in filename] [-out fi ... 
