Submission #1369089

#TimeUsernameProblemLanguageResultExecution timeMemory
1369089fauntleroyHomework (CEOI22_homework)C++20
100 / 100
128 ms146500 KiB
#include <bits/stdc++.h>

using namespace std;

struct Node {
    int l = -1, r = -1;
    char op = '?'; 
};

string s;
int pos = 0;
vector<Node> tree;

int parse() {
    int id = tree.size();
    tree.push_back(Node());

    if (s[pos] == '?') {
        tree[id].op = '?';
        pos++;
        return id;
    }

    if (s[pos] == 'm' && s[pos + 1] == 'i') {
        tree[id].op = 'm'; 
        pos += 4; 
    }
    else {
        tree[id].op = 'M'; 
        pos += 4; 
    }

    tree[id].l = parse();

    pos++; 

    tree[id].r = parse();

    pos++; 

    return id;
}

struct tr {
    int L, R, sz;
};

tr dfs(int v) {
    if (tree[v].op == '?') {
        return {1, 1, 1};
    }

    tr a = dfs(tree[v].l);
    tr b = dfs(tree[v].r);

    tr res;
    res.sz = a.sz + b.sz;

    if (tree[v].op == 'm') {
        res.L = min(a.L, b.L);
        res.R = a.R + b.R - 1;
    }
    else {
        res.L = a.L + b.L;
        res.R = max(a.R + b.sz, b.R + a.sz);
    }

    return res;
}

void solve() { 
    cin >> s;

    pos = 0;
    tree.clear();

    int root = parse();
    tr ans = dfs(root);

    cout << ans.R - ans.L + 1 << '\n';
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    solve();

    return 0;    
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...