• 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 }
  • 相关阅读:
    开通第一天,以此随笔作为纪念
    Apache 基于IP访问网站
    命令解释
    vi总结
    RAID
    Windows虚拟机安装
    CentOS虚拟机安装
    通过挂载系统光盘搭建本地yum仓库的方法
    VMware workstation 的安装
    Linux下关于vi命令的详细解说
  • 原文地址:https://www.cnblogs.com/dagon/p/4783513.html
Copyright © 2020-2023  润新知