Submission

Status:

[PPPPPPPPPx]

Subtask/Task Score:

{0/100}

Score: 0

User: C12

Problemset: composite tree

Language: cpp

Time: 0.004 second

Submitted On: 2026-01-20 14:51:18

#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[1000] = {0};
int arr2[1000] = {0};
int out[1000] = {0};

void recursive(int i){
    if(out[i] == 0)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 = 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 = 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 < 100;i++){
        // cout << arr1[i] << ' ' << arr2[i] << ' ';
        if(arr1[i] > 0 && arr2[i] > 0){
            out[i] = arr1[i] + arr2[i];
        }
        // cout << out[i] << ' ';
    }

    pos = 0;
    index = 1;

    recursive(1);
    // while(1){
    //     if(out[index] > 0){
    //         cout << out[index] << ' ';
    //         index *= 2;
    //         pos_back.push(0);
    //     }
    //     else{
    //         pos = pos_back.top();
    //         pos_back.pop();
    //         if(pos == 0){
    //             index += 1;
    //             pos_back.push(1);
    //         }
    //         else if(pos == 1){
    //             index = (index-1)/2;
    //         }
    //     }

    //     if(!pos_back.empty()){
    //         return;
    //     }
    // }

    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()()))
*/