只解决55分链部分为啥只有两个点,求hack
查看原帖
只解决55分链部分为啥只有两个点,求hack
219734
IAK2020楼主2020/12/1 23:05
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
typedef unsigned long long ull;
inline int read()
{
	char ch=getchar();
	int X=0;
	if(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
	return X;
}

ull n,idx,ans;
char c[N];
ull f[N],a[N],stackt[N],ct,hs[N],sum[N];

inline void st(int u)
{
	f[u]+=f[u-1];
	stackt[++idx]=u;
	if(c[u]=='(')
	ct++;
	else//待入栈元素已经是右括号 
	{
		if(ct)//栈中有左括号 
		{
			f[u]++;
			idx-=2;
			ct--;
			//sum[u]=sum[u-1]+f[u];
		}
	}

}

int main()
{
	n=read();
	for(int i=1;i<=n;i++)
	cin>>c[i];
	for(int i=1;i<n;i++)
	a[i]=read();
	
	for(int i=1;i<=n;i++)
	st(i);//到此处计算出每个元素到根部的合法括号树
	
	//for(int i=1;i<=n;i++)
	//cout<<f[i]<<" "; 
	for(int i=1;i<=n;i++)
	ans^=f[i]*i;
	cout<<ans; 
	return 0;
}
2020/12/1 23:05
加载中...