• P1928 外星密码题解


    题目传送门

    思路:

    起初是想模拟,但是要处理很多层,并不好做,然后想到递归,但是如果整个串一起处理有些复杂,我在题解里看到一种巧妙的方法。我们每次碰到’[’,就说明遇到一个压缩串,然后这个‘[’之后必然会跟一个数字,我们可以单独把它提出来,再看后面那个串,最后把需要加的加上去就行了。

    下面是三组测试用例:
    AC[3AC[3FUN]]FUN
    ACACFUNFUNFUNACFUNFUNFUNACFUNFUNFUNFUN

    AC[3FUN]
    ACFUNFUNFUN

    AC[3TLE][4MLE]WA
    ACTLETLETLEMLEMLEMLEMLEWA

    注意
    这里特别需要注意的是:递归函数的变量,要想放在全局区一定要慎重!在递归函数里声明变量,与将变量声明在全局区是不一样的,放在全局区里会MLE!
    原因:你的函数在读入d后会进行递归,如果d作为全局变量,每次递归所改动的都是同一个d,这会导致后面的循环得到错误的次数。

    #include <bits/stdc++.h>
    
    using namespace std;
    
    string expand() {
        int d;
        char x; 
        string s;
        while (cin >> x) {
            if (x == '[') {
                cin >> d;
                string t = expand();
                while (d--) s += t;
            } else if (x == ']')
                return s;
            else s += x;
        }
        return s;
    }
    
    
    int main() {
        cout << expand();
        return 0;
    }
    
  • 相关阅读:
    Train Problem(栈的应用)
    Code obfuscatio (翻译!)
    Milking Cows
    Sorting a Three-Valued Sequence(三值排序)
    Asphalting Roads(翻译!)
    FatMouse' Trade
    Fibonacci Again
    Yogurt factory
    经济节约
    Lucky Conversion(找规律)
  • 原文地址:https://www.cnblogs.com/littlehb/p/15028627.html
Copyright © 2020-2023  润新知