zoukankan      html  css  js  c++  java
  • CODEVS4650 破损的键盘

    传送门

    题目大意:一个字符串,将[]内的字符提前。

    题解:链表,数组元素高效交换

    cur表示目前元素插入下标为cur的元素后面。

    所以,假设目前把下标为i的元素插到cur后面。

    那么,next[i]=next[cur],为cur后面的元素成为i后面的元素

    next[cur]=i,cur后面的元素就是i了。

    如果遇到'[',说明要把后面到'['插到开头了,cur赋值为0,

    last表示最后输出答案的下标。

    如果遇到']',那么cur=last,继续从最后一个元素开始插入。

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 100009
    using namespace std;
    
    char s[maxn];
    int cur,last,next[maxn];
    
    int main(){
        while(scanf("%s",s+1)!=EOF){
            int len=strlen(s+1);
            next[0]=0;last=cur=0;
            for(int i=1;i<=len;i++){
                if(s[i]=='[')cur=0;
                else if(s[i]==']')cur=last;
                else{
                    next[i]=next[cur];
                    next[cur]=i;
                    if(cur==last)last=i;
                    cur=i;
                }
            }
            for(int i=next[0];i;i=next[i])
             printf("%c",s[i]);
            printf("
    ");
        }
        return 0;
    }
    AC
  • 相关阅读:
    android kl文件
    ELF文件结构描述
    jquery开头
    win7无声音显示“未插入扬声器或耳机” 怎么解决
    xhtml头文件设置
    break和continue的区别
    php目录函数
    mysql语法
    php中怎么导入自己写的类
    截取文件后缀名
  • 原文地址:https://www.cnblogs.com/zzyh/p/7724195.html
Copyright © 2011-2022 走看看