Cod sursă (job #239657)

Utilizator avatar heyanca Anca Badiu heyanca IP ascuns
Problemă Bizar (clasele 9-10) Compilator cpp | 1,09 kb
Rundă Arhiva de probleme Status evaluat
Dată 6 mai 2016 19:40:56 Scor 100
#include <fstream>
#include <cstring>

using namespace std;

ifstream fin ("bizar.in");
ofstream fout ("bizar.out");

#define MAXD 100001

char a[MAXD];
long long nr[MAXD], num;
int paranteze[MAXD], l, indnr, indpr;

int main()
{
    fin.getline(a, MAXD -1);
    l = strlen(a);

    for (int i =0; i<l; i++)
    {
        while (a[i] == ' ' || a[i] == ',')i++;

        if (a[i] >= '0' && a[i] <= '9')
        {
            num =0;
            while(a[i] >= '0' && a[i] <= '9')
            {
                num = num*10 + a[i] - '0';
                i++;
            }
            i--;
            nr[++indnr] = num;
        }
        else if (a[i] == '(')paranteze[++indpr]=indnr+1;
        else if (a[i] == ')')
        {
            int rep, x;
            rep = indnr - paranteze[indpr] + 1;
            x = (nr[paranteze[indpr] - 1])%rep;

            if (x == 0)x = rep;

            nr[paranteze[indpr] - 1] = nr[x + paranteze[indpr] - 1];
            indnr = paranteze[indpr] - 1;
            indpr--;
        }
    }

    fout << nr[1];
    return 0;
}