求大神救(尽量说的让小学生能听懂)
查看原帖
求大神救(尽量说的让小学生能听懂)
990027
Rain2012楼主2024/7/29 15:47
#include<bits/stdc++.h>
using namespace std;
int fa[500005],n;
char tree[500005];
string s;
int count(string s)
{
	int Ans = 0,top = 0,sta[200005] = {},ans[200005] = {};
	for(int i = 0;i < s.size();i++)
	{
		if(s[i] == '(') sta[++top] = i;
		else if(top) ans[i] = ans[sta[top--]-1]+1;
		Ans += ans[i];
	}
	return Ans;
}
int find(int i)
{
    string str = "";
    while(fa[i] != i)
    {
        str += tree[i];
        i = fa[i];
    }
    str += tree[1];
    reverse(str.begin(),str.end());
    return count(str);
}
int main()
{
    cin>>n>>s;
    for(int i = 0;i < s.size();i++)
    {
        tree[i+1] = s[i];
    }
    fa[1] = 1;
    for(int i = 1;i < n;i++)
    {
        cin>>fa[i+1];
    }
    int ans = find(1)*1;
    for(int i = 2;i <= n;i++)
    {
        ans ^= (find(i)*i);
    }
    cout<<ans;
}
2024/7/29 15:47
加载中...