zoukankan      html  css  js  c++  java
  • 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。参考了一下别人的代码交了上去。

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    golang中使用selenium进行爬虫
    SAS关于宏、宏函数、宏变量、data步、proc步和call execute的理解
    golang基础--slice和array
    MySQL基础操作——转
    wamp的手动安装
    SQL索引一步到位
    C语言的随机发牌程序(红桃、黑桃、梅花、方块)
    mysql数据库的导入导出
    比Android更深远的改变世界——谷歌开源人工智能系统TensorFlow文档中文版
    TensorFlow博客翻译——用TensorFlow在云端进行机器学习
  • 原文地址:https://www.cnblogs.com/h-hkai/p/10336380.html
Copyright © 2011-2022 走看看