10pts 求助
查看原帖
10pts 求助
206814
封禁用户楼主2022/10/28 09:59
#include <bits/stdc++.h>
#define int long long
using namespace std;
struct Tree{
    char data;
    list<int> sons;
}tree[500005];
int lst[500005], sum[500005];
string target;
int baby(){
    stack<int> s;
    for(int i = 0; i < target.length(); i++){
        int a = i + 1;
        if(target[i] == '(') s.push(a);
        if(target[i] == ')' && !s.empty()) lst[a] = lst[s.top()] + 1, s.pop();
        sum[a] = sum[a - 1] + lst[a];
    }
    return sum[target.length()];
}
int ans = 0;
void search(int now){
    printf("%lld %s %lld %lld\n", now, target.c_str(), baby(), ans);
    ans ^= now * baby();
    if(tree[now].sons.empty()){
        return;
    }
    for(auto it = tree[now].sons.begin(); it != tree[now].sons.end(); it++){
        target.push_back(tree[*it].data);
        search(*it);
        target.pop_back();
    }
    return;
}
signed main(){
    int n;
    char ch;
    scanf("%lld", &n);
    while(isspace(ch = getchar()));
    tree[1].data = ch;
    for(int i = 2; i <= n; i++){
        tree[i].data = getchar();
    }
    for(int i = 2, t; i <= n; i++){
        scanf("%lld", &t);
        tree[t].sons.push_back(i);
    }
    target += ch;
    search(1);
    printf("%lld\n", ans);
    return 0;
}

search里加了一行调试输出.

8 WA + 10 TLE 敢问有什么问题吗

按理来说应该是 10AC + 10 TLE 才对

2022/10/28 09:59
加载中...