Submission

Status:

[PPPPPPPPPx]

Subtask/Task Score:

{0/100}

Score: 0

User: NovemNotes

Problemset: composite tree

Language: cpp

Time: 0.003 second

Submitted On: 2026-03-12 15:32:48

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

const int N = 109;
const int M = 200009;

int cnt=0;
string one;
string two;
queue<char> q;
int layer[N];
vector<int> u(M,-1),v(M,-1);
vector<int> ans(M,-1);
int mx=0;

void travel(int node){
    if(ans[node]==-1)return ;
    cout << ans[node];
    cout << "(";
    travel(2*node);
    cout << ")";
    cout << "(";
    travel(2*node+1);
    cout << ")";
}

int main(){
    ios_base::sync_with_stdio(false);cin.tie(NULL);
    cin >> one >> two;
    int num = 0;
    int node = 1;
    bool check=false;
    for(auto &x:one){
        if(isalnum(x)){
            num = num*10+(x-'0');
            check=true;
        }else{
            // cout << num << " " << node << "\n";
            if(check && u[node]==-1){
                u[node]=num;
                mx=max(mx,node);
                check=false;
            }// cout << num << " " << ((1<<q.size())+layer[q.size()]%2) << "\n";
            num=0;
            if(x=='('){
                q.emplace(x);
                node <<= 1;
                if(layer[q.size()]%2==1)node++;
            }else{
                layer[q.size()]++;
                node >>= 1;
                q.pop();
            }
        }
    }
    check=false;
    for(auto &x:two){
        if(isalnum(x)){
            check=true;
            num = num*10+(x-'0');
        }else{
            // cout << num << " " << node << "\n";
            if(check&&v[node]==-1){
                v[node]=num;
                check=false;
                mx=max(mx,node);
            }// cout << num << " " << ((1<<q.size())+layer[q.size()]%2) << "\n";
            num=0;
            if(x=='('){
                q.emplace(x);
                node <<= 1;
                if(layer[q.size()]%2==1)node++;
            }else{
                layer[q.size()]++;
                node >>= 1;
                q.pop();
            }
        }
    }
    for(int i=1;i<=mx;i++){
        if(u[i]!=-1&&v[i]!=-1)ans[i]=u[i]+v[i];
    }
    travel(1);
    return 0;
}
/*
5(2(8()())())(1(6(2()())(3()()))())
3(4()())(8(1(2()())())(3()()))
*/