fbpx

Problema #2088 – decodif – Rezolvari PBInfo

de Mihai-Alexandru

Se consideră următorul model (pattern): n[string] care este echivalent cu șirul (string)(string)...(string) (string repetat de de n ori). Pornind de la acest model orice șir de caractere poate fi codificat.

Exemple :

Exemplu

Intrare

3[a1[b2[c]]]

Ieșire

abccabccabcc

Intrare

3[a2[c]]2[x3[y]]

Ieșire

accaccaccxyyyxyyy
#include <bits/stdc++.h>



using namespace std;

#define Max 1001
#define DecodMax 100001

char a[Max], r[DecodMax];
deque< pair<int, int> > Q;

int main()
{
    cin >> a;

    int n = strlen(a), nr = 0, ind = 0, rep, indinit;
    for (int i = 0; i < n; ++ i)
    {
        if (a[i] <= '9' && a[i] >= '0')
            nr = nr * 10 + a[i] - '0';
        else if (a[i] == '[')
            Q.push_back(make_pair(ind, nr)), nr = 0;
        else if (a[i] == ']')
        {
            rep = Q.back().second;
            indinit = ind;
            while (-- rep)
                for (int j = Q.back().first; j < indinit; j ++)
                    r[ind ++] = r[j];

            Q.pop_back();
        }
        else
            r[ind ++] = a[i];
    }
    cout << r;
}
Comentarii

S-ar putea sa iti placa