35分tle求助
查看原帖
35分tle求助
195705
李湛然楼主2020/8/20 11:36
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
using namespace std;
int n;
struct treenode{
	int f=0;
	char c;
	int mynum;
}tree[5*100000+1];
vector<char> v1;
void cal(int x)
{
	if(tree[x].f==0)
	{
		v1.push_back(tree[x].c);
		return ; 
	}
	cal(tree[x].f);
	v1.push_back(tree[x].c);
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>tree[i].c;
	}
	for(int i=1;i<n;i++)
	{
		cin>>tree[i+1].f;
		tree[i].mynum=i;
	}
	tree[n].mynum=n;
	int ans=0;
	int cnt=0;
	for(int i=1;i<=n;i++)
	{
		int ans=0;
		v1.clear();
		cal(i);
//		cout<<i<<endl;
//		for(int r=0;r<v1.size();r++)
//		{
//			cout<<v1[r]<<" ";
//		}
//		cout<<endl;
		for(int t=0;t<v1.size();t++)
		{
			for(int j=t+1;j<v1.size();j++)
			{
				stack<char> s;
				bool f=0;
				for(int k=t;k<=j;k++)
				{
					if(v1[k]=='(')
					{
						s.push('(');
					}
					else
					{
						if(s.size()==0)
						{
							f=1;
							break;
						}
						else
						{
							s.pop();
						}
					}
				}
				if(f==0 && s.size()==0)
				{
					ans++;
				}
			}
		}
		cnt^=(i*ans);
	}
	cout<<cnt;
	return 0;
} 
2020/8/20 11:36
加载中...