去年的代码,不知道为什么只有65分。
#include <iostream>
#include <map>
#include <cstdio>
#include <cctype>
using namespace std;
long long n;
char c[10000000];
struct edge
{
long long to,nxt;
}e[10000000];
long long head[10000000];
long long cnt=0;
void add(int a,int b)
{
e[++cnt].to=b;
e[cnt].nxt=head[a];
head[a]=cnt;
}
char str[1000000];
long long len=0;
long long ans[1000000];
int dfs(long long x,long long fa)
{
ans[x]=ans[fa];
str[++len]=c[x];
if(c[x]==')')
{
int t=0;
for(int i=len;i>0;i--)
{
if(str[i]==')')t++;
if(str[i]=='(')t--;
if(t<0)break;
if(t==0)
{
ans[x]++;
}
}
}
for(int i=head[x];i;i=e[i].nxt)
{
dfs(e[i].to,x);
}
str[len]=' ';
len--;
return 0;
}
int main()
{
int i,j,k;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>c[i];
}
for(i=2;i<=n;i++)
{
int a;
scanf("%d",&a);
add(a,i);
}
dfs(1,0);
int num=0;
for(i=1;i<=n;i++)
{
num^=(i*ans[i]);
}
cout<<num;
return 0;
}
不希望有无意义回复,谢谢大佬