• 牛客小白D题(STL的迭代器)


    「只要我拉动绳线,你就得随之起舞。」          ——泰兹瑞


           泰兹瑞来到卡拉德许之后,由于他精湛的神器制造技术,可谓是过的如鱼得水。这次,他为自己打造了一个编辑器,称为威穆(Veim)。操作威穆时,有两种模式,具体操作如下。

    Normal Mode
    - 按下 i :进入 Insert Mode
    - 按下 f :紧接着一个小写字母 char,若当前光标后(右)方有至少一个 char ,将光标移动到其所在位置,否则不移动。
    - 按下 x :删除当前光标所在位的字符,后面的字符均会前移一格。
    - 按下 h :将光标向左(前)移动一格,若无法移动就不移动。
    - 按下 l :将光标向右(后)移动一格,若无法移动就不移动。
    - 若按下了其他字符:无任何效果。

    Insert Mode
    - 按下非 e 小写字母 char :在光标当前位置前插入这个字母 char。
    - 按下 e :退出 Insert Mode(进入 Normal Mode)。 

           (具体请见样例)
           现在泰兹瑞的威穆中已经写入了一个字符串 s 。接下去泰兹瑞进行了一波操作(按下了若干按键),他的按键序列为 t 。现给出 s 和 t ,求这波操作之后威穆内留下的字符串。

    输入描述:

    两行,第一行字符串 s ,第二行字符串 t 。

    输出描述:

    一行,威穆里最后留下的字符串。
    示例1

    输入

    复制
    applese
    xfllhlia

    输出

    复制
    pplaese

    说明

    - 初始时,字符串为 
    mathtt{underline{a}pplese}
    ,威穆处于 Normal Mode 。下划线表示光标所在位置。
    - 第一步操作为 x ,删除当前光标所在位的字符,并且光标后移一格。字符串变为
    mathtt{underline{p}plese}
     。威穆仍处于 Normal Mode。
    - 下一步操作为 f ,之后跟有一个字符 `l` 。光标后存在字符 `l` ,故移动到该位置。字符串变为
    mathtt{ppunderline{l}ese}
     。威穆仍处于 Normal Mode。
    - 下一步操作为 l ,光标后移一格。字符串变为
    mathtt{pplunderline{e}se}
     。威穆仍处于 Normal Mode。
    - 下一步操作为 h ,光标前移一格。字符串变为
    mathtt{ppunderline{l}ese}
     。威穆仍处于 Normal Mode。
    - 下一步操作为 l ,光标后移一格。字符串变为
    mathtt{pplunderline{e}se}
     。威穆仍处于 Normal Mode。
    - 下一步操作为 i ,威穆进入 Insert Mode。字符串仍为
    mathtt{pplunderline{e}se}

    - 下一步操作为 a ,而非 e ,故插入字符 a 。字符串变为
    mathtt{pplaunderline{e}se}
    示例2

    输入

    复制
    pppp
    iaefpfpia

    输出

    复制
    appapp

    备注:

    1 ≤ |s|, |t| ≤ 10

    5


    s, t 均由小写拉丁字母组成。


    有点尴尬,当时写了一个双向链表。然后,赛后,用STL写写就过了。
    #include<cstdio>
    #include<list>
    #include<stdio.h>
    using namespace std;
    list<char>ss;
    
    int main()
    {
        char c;
        while (c = getchar(), c != '
    '){
            ss.push_back(c);
        }
        bool flag = 1;
        list<char>::iterator it = ss.begin();
        while (c = getchar(), c != '
    ')
        {
            if (flag)
            {
                switch (c)
                {
                case 'i':{flag = 0; }
                    break;
                case 'f':{
                             char x = getchar();
                             list<char>::iterator ki = ++it;    --it;
                             for (; ki != ss.end(); ++ki){
                                 if (*ki == x){
                                     it = ki; break;
                                 }
                             }
                }
                    break;
                case 'x':{ss.erase(it++); }
                    break;
                case 'h':{--it; if (it == ss.end())++it; }
                    break;
                case 'l':{++it; if (it == ss.begin())--it; }
                    break;
                default:
                    break;
                }
            }
            else{
                if (c == 'e')flag = 1;
                else{
                    ss.insert(it, c);
                }
            }
        }
        for (list<char>::iterator it = ss.begin(); it != ss.end(); ++it)
        {
            printf("%c", *it);
        }
        printf("
    ");
    }
  • 相关阅读:
    Attributes in C#
    asp.net C# 时间格式大全
    UVA 10518 How Many Calls?
    UVA 10303 How Many Trees?
    UVA 991 Safe Salutations
    UVA 10862 Connect the Cable Wires
    UVA 10417 Gift Exchanging
    UVA 10229 Modular Fibonacci
    UVA 10079 Pizza Cutting
    UVA 10334 Ray Through Glasses
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/9974185.html
Copyright © 2020-2023  润新知