65分
查看原帖
65分
115359
phigy楼主2020/8/25 15:37

去年的代码,不知道为什么只有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;
}

不希望有无意义回复,谢谢大佬

2020/8/25 15:37
加载中...