Submission

Status:

[PPPPPPPPPx]

Subtask/Task Score:

{0/100}

Score: 0

User: C12

Problemset: composite tree

Language: cpp

Time: 0.002 second

Submitted On: 2026-01-20 15:49:29

#include <bits/stdc++.h>
using namespace std;

#define f first
#define s second
#define pii pair<ll,ll>
#define puii pair<ull,ull>
#define piii pair<ll,pii>
#define ll long long
#define ull unsigned long long
#define mp make_pair
 
#define mpiii(a,b,c) make_pair(a,make_pair(b,c));
int32_t mod = 1e9+7;

/*
    left    **2
    right   **2 + 1
*/

int arr1[100000] = {0};
int arr2[100000] = {0};
int out[100000] = {0};

void recursive(int i){
    if(out[i] == 0 || i >= 100000)return;
    cout << out[i];
    cout << '(';
    recursive(i*2);
    cout << ')';
    cout << '(';
    recursive(i*2 + 1);
    cout << ')';
    return;
}

void solve(){
    string st;
    cin >> st;
    
    stack<ll>pos_back;
    int pos = 0;
    int index = 1;
    int num,last = 0;

    for(int i = 0;i < st.length();i++){
        if(st[i] == '('){
            if(last == 1){
                pos = 1;
                index = (index*2) + pos;
            }
            else if(last == 0){
                pos = 0;
                index = (index*2);
            }

            pos_back.push(pos);
            last = 0;

            // index = (index*2) + pos;
        }
        else if(st[i] == ')' && !pos_back.empty()){
            pos = pos_back.top();
            pos_back.pop();

            index = (index-pos) / 2;

            // pos++;
            last = 1;
        }
        else{
            num = st[i]-'0';
            arr1[index] = num;
        }
        // cout << st[i] << ' ' << index << '\n';
    }
    while(!pos_back.empty())pos_back.pop();

    cin >> st;
    
    pos = 0;
    index = 1;
    last = 0;

    for(int i = 0;i < st.length();i++){
        if(st[i] == '('){
            if(last == 1){
                pos = 1;
                index = (index*2) + pos;
            }
            else if(last == 0){
                pos = 0;
                index = (index*2);
            }

            pos_back.push(pos);
            last = 0;

            // index = (index*2) + pos;
        }
        else if(st[i] == ')' && !pos_back.empty()){
            pos = pos_back.top();
            pos_back.pop();

            index = (index-pos) / 2;

            // pos++;
            last = 1;
        }
        else{
            num = st[i]-'0';
            arr2[index] = num;
        }
        // cout << st[i] << ' ' << index << '\n';
    }
    while(!pos_back.empty())pos_back.pop();

    for(int i = 0;i < 100000;i++){

        if(arr1[i] > 0 && arr2[i] > 0){
            out[i] = arr1[i] + arr2[i];
        }

    }

    pos = 0;
    index = 1;

    recursive(1);
    
    return;
}

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

    // ll q;
 
    // cin >> q;
    
    // while(q--) 
    solve();

    return 0;
}

/*
5(2(8()())())(1(6(2()())(3()()))())
3(4()())(8(1(2()())())(3()()))
*/