uva 11988 Broken Keyboard (a.k.a. Beiju Text)

点击打开链接uva 11988

思路: deque模拟
分析:
1 题目给定一个字符串要求通过一序列的模拟输出最后的字符串
2 根据题目的意思[],分别表示的是键盘上的home和end键,home键的作用是跳到起始位置,end的作用是到最后一个位置。
3 根据2我们可以利用双端队列来模拟,如果是[我们插入front,如果是]插入back,最后在输出即可

代码:

#include<deque>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int MAXN = 100010;

char str[MAXN];
deque<string>dqe;

void insert(bool front , bool rear , string s){
    if(front)
        dqe.push_front(s);
    if(rear)
        dqe.push_back(s);
}

void output(){
    while(!dqe.empty()){
         cout<<dqe.front();
         dqe.pop_front();
    }
    puts("");
}

void solve(){
    int len = strlen(str);
    bool front , rear;
    string s = "";
    front = true;
    rear = false;
    for(int i = 0 ; i < len ; i++){
        if(str[i] == '['){
           insert(front , rear , s);
           s = "";
           front = true;
           rear = false;
        }
        else if(str[i] == ']'){
           insert(front , rear , s);
           s = "";
           front = false;
           rear = true;
        }
        else{
           s += str[i];
        }
    }
    insert(front , rear , s);
    output();
}

int main(){
    while(scanf("%s" , str) != EOF)
        solve();
    return 0;
}

list 来做

#include<list>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int MAXN = 100010;
list<char>ls;

int main(){
    char str[MAXN];
    while(gets(str)){
         ls.clear();
         int len = strlen(str);
         list<char>::iterator it = ls.begin();
         for(int i = 0 ; i < len ; i++){
             if(str[i] == '[')
                it = ls.begin();
             else if(str[i] == ']')
                it = ls.end();
             else{
                ls.insert(it,str[i]);
             }
         }
         for(it = ls.begin(); it != ls.end() ; it++)
             printf("%c" , *it);
         puts("");
    }
    return 0;
}
时间: 2024-09-25 07:00:19

uva 11988 Broken Keyboard (a.k.a. Beiju Text)的相关文章

刘汝佳uva 字符串专题

第一题   palindrome 点击打开链接uva 401 题目意思:给定一个字符串判断是什么类型 分析: 1 根据输出我们知道这个字符串总共有4种类型 2 首先应该是否是"palindrome ",判断的理由很简单直接对这个字符串进行判断,但是这里有个地方会出错就是'0'和'O',题目明确说明了'0'和'O'看成相同,所以我们应该在输入的时候就把所有的'0'处理成'O',注意这里不能把'O'改成'0'(想想为什么?) 3 接下来判断是否是"mirrored string&

Trojan.DL.VBS.Agent.cpb(k[1].js)脚本病毒的解决方法_病毒查杀

脚本病毒:Trojan.DL.VBS.Agent.cpb (文件名为k[1].js)老是在internet临时文件里出现,瑞星监控杀了又来,如此反复着!我试图清空临时文件,但一上网打开网页(不管是哪些网页),那个k[1].js又会被瑞星监控到.这是怎么回事呀?是误报吗? 该网页利用MS06-014漏洞,下载http://day.91tg.net/xp.dll到C:\WINDOWS\winhelp.dll,并直接写入注册表 Code: HKLM\SOFTWARE\Classes\CLSID\{6B

Oratop工具——实时数据库性能监控工具

Oratop工具--实时数据库性能监控工具 原文地址:Oratop工具--实时数据库性能监控工具 作者:realkid4 在任何系统优化过程中,"80/20原则"是我们一定要关注的问题.简单的说,就是我们系统80%的性能问题.现象,都是有少数几个甚至一个问题造成的.这就需要我们面对复杂的系统性能问题的时候,要学会"拨开云雾.蛇打七寸".   落实在Oracle优化过程,同样如此.从10g开始,我们开始频繁接受"Top-xxx"的概念,无论是从OE

Awesome Python

    Awesome Python      A curated list of awesome Python frameworks, libraries, software and resources. Inspired by awesome-php. Awesome Python Environment Management Package Management Package Repositories Distribution Build Tools Interactive Interp

模糊、缓冲、顺序加载、XML等的混合运用简单实例

xml|加载 放假了,没多少事,发个模糊.缓冲.顺序加载.XML等的混合运用简单实例,作品粗糙,给我等新手们参考,抛砖引玉吧,如果你觉得可以一定记得要顶帖. 第一帧上加载进度显示: stop(); load_txt.selectable = false;//动态文本用于显示加载进度 onEnterFrame = function () {         var l:Number = _root.getBytesLoaded();         var t:Number = _root.get

列出C#进程以及详细信息

建立一个listBox将进程名称遍历进去 this.listBox1.Items.Clear(); Process[] MyProcesses=Process.GetProcesses(); foreach(Process MyProcess in MyProcesses) { this.listBox1.Items.Add(MyProcess.ProcessName); } this.listBox1.SelectedIndex=0; 选中listBox里面的项后将进程详细信息显示在右面的La

Java Applet程序响应鼠标键盘的例子

与用户的交互是Java的主要作用,也正是Java吸引人的原因,用户可以通过鼠标与Java Applet程序对话.我们先来看响应鼠标的例子: //Mouse.java import java.awt.*; import java.applet.*; public class Mouse extends Applet { String text=""; public void paint(Graphics g) { g.drawString(text,20,20); } public bo

PPT制作精确坐标系

在中学数学的课件制作中,坐标系是不可缺少的,特别是<解析几何>等方面的内容.可是,我们在PowerPoint中制作课件,坐标系通常是用线条组合而成的,很难做到量化上的精确.那么如何才能根据我们的需要灵活定制精确的坐标系呢?一起来看看吧. 参数面板的制作 首先在幻灯片编辑状态,点击菜单命令"视图→工具栏→控件工具箱",打开"控件工具箱"工具栏,点击"文字框"控件.用鼠标拖放的方法在幻灯片编辑区拖放四个文字输入框,用"绘图&qu

Android应用如何支持屏幕多尺寸多分辨率问题

    作为Android应用程序开发者都知道android是一个"碎片化"的世界.多种系统版本.多种尺寸.多种分辨率.多种机型,还有不同的厂商定制的不同ROM,你开发的应用会在不可预期的手机上报错.这给开发适配带来不小的难度.这篇文章会告诉我们怎么解决这个问题. 1.Android碎片化 1.1.android系统版本 Android更新较大的版本如下:    上面只有当前可用版本,Android L作为开发者版本没有出现其中,未来会有更多的版本.下图给出Android各个版本的占有