为什么全TLE?
查看原帖
为什么全TLE?
605353
yrx0115楼主2024/4/27 16:02

记录

#include<iostream>
using namespace std;
int n,ans,sum[500005],f[500005];
bool k[500005],k1[500005];
bool cheak(int x,int c){
	int top=0;
	for(int i=x+c-1;i>=x;i--){
		if(k1[i]==false) top++;
		else if(top==0) return false;
		else top--;
	}
	if(top==0) return true;
	else return false;
}
bool find(int p){
	int cnt=1,p1=p,l;
	k1[1]=k[p];
	while(f[p1]!=0) p1=f[p1],k1[++cnt]=k[p1];
	l=cnt;
	if(cnt%2==1) l--;
//	for(int i=l;i>=2;i-=2){
//		for(int j=1;j+i-1<=cnt;j++){
//			if(cheak(j,i)){
//				sum[p]=i/2;
//				break;
//			}
//		}
//	}
	for(int i=1;i<cnt;i++){
		for(int j=2;i+j-1<=cnt;j+=2){
			//cout<<p<<" "<<i<<" "<<j<<endl;
			if(cheak(i,j)) sum[p]++; 
		}
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		char a;
		cin>>a;
		if(a==')') k[i]=true;
	}
	for(int i=2;i<=n;i++) cin>>f[i];
	for(int i=1;i<=n;i++) find(i);
	//for(int i=1;i<=n;i++) cout<<sum[i]<<" ";
	//cout<<endl;
	ans=sum[1];
	for(int i=2;i<=n;i++) ans^=sum[i]*i;
	cout<<ans;
	return 0;
}
2024/4/27 16:02
加载中...