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);
}