码迷,mamicode.com
首页 > 其他好文 > 详细

S:List

时间:2019-01-30 01:31:06      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:pre   重复   push   ret   ++   cto   开始   序列   str   

描述

写一个程序完成以下命令:
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。参考了一下别人的代码交了上去。

 

S:List

标签:pre   重复   push   ret   ++   cto   开始   序列   str   

原文地址:https://www.cnblogs.com/ruruozhenhao/p/10336380.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!