Cod sursă (job #440741)

Utilizator avatar VisoiuAndrei Andrei Visoiu VisoiuAndrei IP ascuns
Problemă Bizar (clasele 9-10) Compilator cpp | 1,17 kb
Rundă Arhiva de probleme Status evaluat
Dată 1 mar. 2019 17:40:45 Scor 100
#include <bits/stdc++.h>

using namespace std;

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

const int LMAX = 100001;
char s[LMAX];

inline bool cif(char a) {
    return a >= '0' && a <= '9';
}

int analyseElement(int&);

int parse(int& p, int x) {
    vector<int> secv;
    while(s[p] != ')' && s[p] != 0) {
        if(cif(s[p])) secv.push_back(analyseElement(p));
        else p++;
    }

    p++;
    int k = secv.size();
    if(x%k == 0) return secv[k-1];
    return secv[x%k-1];
}

int analyseElement(int& p) {
    int sol = 0;
    while(s[p] != ',' && s[p] != ')' && s[p] != 0) {
        if(cif(s[p])) {
            int nr = 0;
            while(cif(s[p]))
                nr = nr*10 + s[p++] - '0';

            while(s[p] == ' ')
                p++;

            if(s[p] == '(') {
                p++;
                sol = parse(p, nr);
            } else return nr;
        } else if(s[p] == '(')
            p++, sol = parse(p, sol);
        else p++;
    }
    return sol;
}
int main()
{
    in.get(s, LMAX);
    int p = 0, nr = 0, sol = 0;

    sol = analyseElement(p);

    out << sol << '\n';
    return 0;
}