修行之路~欧喷扎职3.9-3339

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行每行一个命令。输出按题目要求输出。样例输入

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深刻了解STL的无敌。。自己手打的不是TLE就是RE 满分代码

#include<bits/stdc++.h>
using namespace std;

int n,m,k,l,s,t,r;
list<int>a[200005];
string p;

int main()
{
    //freopen("1.txt","r",stdin);
    int i,j;
    ios::sync_with_stdio(false);
    cin>>n;
    for(j=1;j<=n;j++)
    {
        cin>>p;
        if(p=="new") cin>>l;
        else
        if(p=="add")
        {
            cin>>l>>r;
            a[l].push_back(r);
        }
        else if(p=="out")
        {
            cin>>l;
            if(a[l].empty())
            cout<<endl;
            else
            {
                a[l].sort();
                for(list<int> :: iterator i=a[l].begin();i!=a[l].end();i++)
                cout<<*i<<" ";
                cout<<endl;
            }
        }
        else if(p=="merge")
        {
            cin>>l>>r;
            a[l].merge(a[r]);
        }
        else
        if(p=="unique")
        {
            cin>>l;
            a[l].sort();
            a[l].unique();
        }
    }
    return 0;
}

点击展开

手写代码 (0分仅供参考)

#include <vector>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

struct node{
    int a[20000];
    int w;
}e[10000];
string a;
vector<int>q;
bool s[200001],d[200001];
int f,b[200001],n,i,id,j,r,z,y;
int main()
{
    cin>>n;
    while(n--)
    {
        cin>>a;
        if(a=="new") {
            cin>>r;
            d[r]=1;
        }
        if(a=="add") {
            cin>>z>>y;
            e[z].a[e[z].w++]=y;
        }
        if(a=="out") {
            cin>>r;
            if(d[r]==1)
            {
                for(i=0;i<e[r].w;++i)
                if(e[r].a[i]!=0) b[i]=e[r].a[i];
                sort(b,b+e[r].w);
                for(i=0;i<e[r].w;++i)
                cout<<b[i]<<" ";
            }
            cout<<endl;
        }
        if(a=="merge")
        {
            cin>>z>>y;
            for(i=0;i<e[y].w;++i)
            e[z].a[e[z].w++]=e[y].a[i];
            d[y]=0;
        }
        if(a=="unique")
        {
            memset(s,0,sizeof(s));
            cin>>r;
            for(i=0;i<e[r].w;++i)
            if(s[e[r].a[i]]==0)
            {
                q.push_back(e[r].a[i]);
                s[e[r].a[i]]=1;
            }
            e[r].w=0;
            while(!q.empty())
            {
                e[r].a[e[r].w++]=q.back() ;
                q.pop_back();
            }
        }
    }
}

点击展开

          普及点知识。 

          C++ list的基本操作和使用

Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.

  assign() 给list赋值
  back() 返回最后一个元素
  begin() 返回指向第一个元素的迭代器
  clear() 删除所有元素
  empty() 如果list是空的则返回true
  end() 返回末尾的迭代器
  erase() 删除一个元素
  front() 返回第一个元素
  get_allocator() 返回list的配置器
  insert() 插入一个元素到list中
  max_size() 返回list能容纳的最大元素数量
  merge() 合并两个list
  pop_back() 删除最后一个元素
  pop_front() 删除第一个元素
  push_back() 在list的末尾添加一个元素
  push_front() 在list的头部添加一个元素
  rbegin() 返回指向第一个元素的逆向迭代器
  remove() 从list删除元素
  remove_if() 按指定条件删除元素
  rend() 指向list末尾的逆向迭代器
  resize() 改变list的大小
  reverse() 把list的元素倒转
  size() 返回list中的元素个数
  sort() 给list排序
  splice() 合并两个list
  swap() 交换两个list
  unique() 删除list中重复的元素

  这题就是一个模板题 可以一做。查看

时间: 2024-10-23 17:31:59

修行之路~欧喷扎职3.9-3339的相关文章

python 修行之路(1-自我介绍及python环境的搭建)

一.自我介绍 我是一个代码小白,做的非IT的工作.生活的城市因为电子和IT技术的普遍性(呵呵,其实也和收入有关),也有想学习一门技术的想法,误打误撞的走上了学习Python的道路.其实对于一个纯小白来时,学习真的很难,代码看不懂,甚至课都听不懂,更重要的是,半路出家对于身在职场的人真的难度太大了.不过细想起来,这会不会是一种挑战?会不会是一种机遇?这不正是当初书生意气,仗剑走天涯的感觉么?不管怎样,既然要学就要学好,就算是为了证明我不害怕代码(呵呵).相信向我这样小白走上啃代码道路的人一定会有,

python修行之路(三 模块初识及数据运算类型)

在python修行路上,果不其然的遇到了第一个困处,开始看不懂代码,开始出现理解苦难的现象,这是小白修行路上的正常现象.其实自己是很慌的,感觉很无助,能做的就是把自己学的慢慢记录下来,理一个自己的逻辑,尽量写清楚,写的通俗易懂,为与我类似的修行者做参考. 一.模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,使用时安装调用就好,现在先象征性的学习2个简单的. sys模块--sys pass功能#!/usr/bin/env python# -*- coding: utf-8

欲练JS,必先攻CSS——前端修行之路

今天我讲的主题是css,具体聊一下我大概的css学习历史,分享一些干货,希望这次分享对大家有所启发和帮助. 个人的css历史: 说说自己的css学习的历史,12年,当时是老师手把手1对1教我div+float的固定布局,所有元素全部用float,做了学生会网站的全部前端页面,因为有段时间学PS比较多,也是自己做的UI,很丑,老师说第一次做成这样很不错了,那时老师就觉得我有做前端的天赋,我就是从这个时候开始接触前端的.毕业设计自己一个人做了一个全栈的web,做完整个毕业设计后,我就决定出来要做前端

Python修行之路__流程控制

Python和其他语言有一个很大的区别在于:Python 使用硬回车来分割语句,使用冒号(:)和缩进来分割代码块.同一层次的语句必须有相同的缩进(每一组这样的语句称为一个块),而C语言风格的编程语言(Java/C#/C++)则使用分号来分割语句,花括号来分割代码块. (注:不要混合使用tab键和空格来进行缩进,这会使程序在跨平台时不能正常的工作.官方推荐的做法是使用四个空格.) 条件和条件语句 Python条件语句是通过一条或多条语句的执行结果(True或False)来决定执行的代码块.在pyt

Python修行之路__数据类型

Python3中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Dictionary(字典) Set(集合) 在Python中,最基本的数据结构就是序列(sequence).序列的每个元素被分配一个序号—即索引(元素的位置),第一个索引是0,第二个则是1,以此类推. Number(数字) 数值类型: 类型 描述 语法示例 int (整型) 无小数部分的数(python3中只有一种整型类型int(长整型),没有Python2中的Long)

修行之路~扣得为艾斯1910递归函数

1910 递归函数 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 对于一个递归函数w(a, b, c). 如果a <= 0 or b <= 0 or c <= 0就返回值1. 如果a > 20 or b > 20 or c > 20就返回W(20,20,20). 如果a < b并且b < c 就返回w(a, b, c ? 1) + w(a, b ? 1, c ? 1) ? w(a, b ?

Python修行之路之字符串(二)修改、查找、格式化

字符串修改replace(old,new[,count]) - > str字符串中找到匹配替换为新子串,返回新字符串count表示替换几次,不指定就是全部替换原字符串为一个常量,不可变.修改返回的为新子串strip([chars]) - > str从字符串两端去除指定字符集chaars中的所有字符如果chars没有指定,去除两端的空白字符空白字符.就是指看不见的字符如\r\n\t空格 空白字符,空串确实为空lstrip([chars]) - > str从左开始rstrip([chars]

IT人的情绪控制实践之路——与心魔斗争的第一步(前言)

    我不反对技术,但是反对把任何技术凌驾于真理之上的做法.  --电影<超时空接触> 一种形象的说法来形容当下IT行业的拼搏之路就像是西欧15-17世纪左右凶险繁盛的大航海世代--大家梦想着航行前往神秘的大陆,梦想着和那些街头小巷都认识的明星船长一样,带着征服海洋的热情,对未知知识的向往,更重要的是神秘大陆上遍地诱人的财富.那一箱箱的珠宝.钻石.香料.丝绸都让人们相信,无论多么困难重重,这都是一条最快积累财富的白银之路.但是,人们在出发前备齐了地图.领航员和食物,却不知道一路风暴所带来的曲

[转]放松是修行的第一课 《次第花开》

本文转自:走出修行的误区——关于出离心 http://www.ptz.cc/plus/view.php?aid=45600 人们常说把修行融入生活中,可奇怪的是,尽管我们很努力,修行却仍然与我们的生活若即若离.当我们打坐.念经.微笑面对他人时,我们觉得自己做 得很好,真正是把佛法运用到生活中了:可是在我们沮丧.愤怒.疼痛.委屈的时候,佛陀的教诲便开始记不清.除了当时极其鲜明而强烈的屈辱感.挫败感外,其 他一切都退到模糊的背景中去了.也许有人不禁要怀疑上师教给我们的种种方法是否真的有效. 为什么修