zoukankan      html  css  js  c++  java
  • Uva11988 Broken Keyboard (a.k.a. Beiju Text)

    题目链接:传送门

    分析:涉及到大量元素移动的题,如果用数组来保存,每一次修改操作一定会超时,解决这个问题的方法就是用链表,记录每个元素的下一个元素是啥,插入元素的过程:假设有i,j,我们要在i,j之间插入k,那么k的下一个就是i的下一个,i个下一个就变成了k,这道题遇到[或者]移动当前要插入的位置就好了.

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <string>
    
    using namespace std;
    
    char s[100010];
    int nextt[100010], cur,last;
    
    int main()
    {
        while (scanf("%s", s + 1) == 1)
        {
            cur = nextt[0] = last =0;
            int sizee = strlen(s + 1);
            for (int i = 1; i <= sizee; i++)
            {
                if (s[i] == '[')
                    cur = 0;
                else
                    if (s[i] == ']')
                    cur = last;
                    else
                    {
                        nextt[i] = nextt[cur];
                        nextt[cur] = i;
                        if (cur == last)
                            last = i;
                        cur = i;
                    }
            }
            for (int i = nextt[0]; i; i = nextt[i])
                printf("%c", s[i]);
            printf("
    ");
        }
    
        return 0;
    }
  • 相关阅读:
    多线程
    关于并发和并行
    文件系统
    java.util.Arrays类
    程序管理与SElinux
    用户和用户组管理总结
    useradd和adduser
    打印可见字符
    cmd中控制某个命令执行多少次
    keras模块之-优化器(optimizers)--笔记
  • 原文地址:https://www.cnblogs.com/zbtrs/p/7569453.html
Copyright © 2011-2022 走看看