Cod sursă (job #438440)

Utilizator avatar Semetg Geroge Semetg Semetg IP ascuns
Problemă Bizar (clasele 9-10) Compilator cpp | 1,07 kb
Rundă Arhiva de probleme Status evaluat
Dată 22 feb. 2019 20:10:45 Scor 100
#include <fstream>
#define FILE_NAME "bizar"
using namespace std;

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

const int N_MAX = 100005;

int K;
char s[N_MAX];
int st[N_MAX], top;

void trim() {
    for (int i = 0; s[i]; ++i)
        if (!isspace(s[i]))
            s[K++] = s[i];
    
    s[K] = '\0';
}

void solve() {
    for (int i = 0; i < K; ++i) {
        if (isdigit(s[i])) {
            int val = 0;
            while (isdigit(s[i]))
                val = val * 10 + s[i++] - '0';
            
            st[++top] = val;
            --i;
        } else if (s[i] == '(') {
            st[++top] = -1;
        } else if (s[i] == ')') {
            int lg = 0;
            while (st[top] != -1) {
                --top;
                ++lg;
            }
            
            if (st[top - 1] % lg == 0)
                st[top - 1] = st[top + lg];
            else
                st[top - 1] = st[top + st[top - 1] % lg];
            
            --top;
        }
    }
}

int main() {
    in.getline(s, N_MAX);
    trim();
    
    solve();
    out << st[1];
}