Submission

Status:

[PPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: someone

Problemset: composite tree

Language: cpp

Time: 0.005 second

Submitted On: 2026-03-11 10:20:49

#include<bits/stdc++.h>
#define f first 
#define s second
using namespace std;

int getNum(string tree) {
    int n = tree.size();
    int num = 0;
    for (int i = 0 ; i < n ; i++) {
        if ('0' <= tree[i] && tree[i] <= '9') num = num*10 + (tree[i]-'0');
        else break;
    }    
    return num;
}

pair<int, int> getLR(string tree) {
    int n = tree.size(), l = -1, r = -1, cnt = 0;
    for (int i = 0 ; i < n; i++) {
        if (tree[i] == '(') {
            if (l == -1) l = i+1;
            cnt++;
        } else if (tree[i] == ')') {
            cnt--;
            if (cnt == 0) {
                r = i-1;
                break;
            }
        }
    }
    return {l, r};
}



string build(string tree1, string tree2) {
    int n = tree1.size(), m = tree2.size();
    if (tree1.size() == 0 || tree2.size() == 0) return "";
    int num1 = getNum(tree1), num2 = getNum(tree2);
    pair<int, int> plr1 = getLR(tree1);
    pair<int, int> plr2 = getLR(tree2);
    int l1 = plr1.f, r1 = plr1.s, l2 = plr2.f, r2 = plr2.s;

    string left1 = tree1.substr(l1, r1-l1+1);
    string right1 = tree1.substr(r1+3, n-r1-4);
    string left2 = tree2.substr(l2, r2-l2+1);
    string right2 = tree2.substr(r2+3, m-r2-4);

    int sum = num1 + num2;
    
    string ans = to_string(sum) + "(" + build(left1, left2) + ")" + "(" + build(right1, right2) + ")";
    return ans;
}

int main() {
    string tree1;
    string tree2;
    cin >> tree1 >> tree2;
    cout << build(tree1, tree2);
}