神奇数据
查看原帖
神奇数据
932094
caoruiqi楼主2025/7/26 10:44

我代码中样例都没过交上去直接A了???

求(骇死我力

//#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
using namespace std;
long long max(long long a,long long b){
	return a>b?a:b;
}
long long min(long long a,long long b){
	return a<b?a:b;
}
long long read(){
	long long x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-'){
			f=-1;
		}
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=(x<<1)+(x<<3)+(c^'0');
		c=getchar();
	}
	return x*f;
}
void write(long long x){
	if(x<0){
		putchar('-');
		x=-x;
	}
	if(x>9){
		write(x/10);
	}
	putchar(x%10+'0');
	return;
}
long long n,i,j,f[500001],sum[500001],ls[500001],ans;
vector<long long> to[500001];
stack<int> q;
char c[500001];
void dfs(long long x){
	int tmp=0;
	if(c[x]==')'){
		if(!q.empty()){
			tmp=q.top();
			q.pop();
			ls[x]=ls[f[tmp]]+1;
		}
	}
	else if(c[x]=='('){
		q.push(x);
	}
	sum[x]=sum[f[x]]+ls[x];
	int j;
	for(auto j:to[x]){
		dfs(j);
	}
	if(tmp){
		q.push(tmp);
	}
	else if(!q.empty()){
		q.pop();
	}
}
signed main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	n=read();
	for(i=1;i<=n;i++){
		scanf("%c",&c[i]);
	}
	for(i=2;i<=n;i++){
		f[i]=read();
		to[f[i]].push_back(i);
	}
	dfs(1);
	for(i=1;i<=n;i++){
		ans^=i*sum[i];
	}
	write(ans);
	return 0;
}

我在本地测第二三个样例都没过,交一发直接A?

(这数据水的是人?

2025/7/26 10:44
加载中...