为什么RE
查看原帖
为什么RE
476574
KAWorld楼主2021/10/25 13:33

考场上一心打这一题的爆搜,结果调到这里的时候出现了问题,计算机显示无法运行,就在check() 函数里,我在前面sta.empty() 函数前面加了!就可以运行,每家就RE

#include<bits/stdc++.h>
#define mod 1000000007
using namespace std;
string st;
int n,k,ans=0;
stack<int>sta;
inline int read()
{
	int s=0,t=1;
	char c=getchar();
	while (c<'0'||c>'9')
	{
		if (c=='-') t=-1;
		c=getchar();
	}
	while (c>='0'&&c<='9')
	{
		s=s*10+c-48;c=getchar();
	}
	return s*t;
}
inline void write(int x)
{
	if (x<0)
	{
		putchar('-');x=-x;
	}
	if (x>9) write(x/10);
	putchar(x%10+'0');
}
int find()
{
	int maxn=-1,s=0;
	for (register int i=0;i<n;++i)
	{
		maxn=max(maxn,s);
		if (st[i]=='*')
			if (i==0||st[i-1]!='*') s=1;
			else ++s;
	}
	return maxn;
}
bool check()
{
	return sta.empty()&&find()<=k;
}
void dfs(int dep)
{
	if (dep>n&&check())
	{
		++ans;ans%=mod;return;
	}
	if (find()>k)
	{
		return;
	}
	if (st[dep-1]=='(') 
	{
		sta.push(1);dfs(dep+1);
	}
	else if (st[dep-1]==')')
		if (!sta.empty())
		{
			sta.pop();dfs(dep+1);
		}
		else return;
	else if (st[dep-1]=='?')
	{
		st[dep-1]='(';sta.push(1);dfs(dep+1);sta.pop();
		if (!sta.empty())
		{
			st[dep-1]=')';sta.pop();dfs(dep+1);sta.push(1);
		}
		st[dep-1]='*';dfs(dep+1);
		st[dep-1]='?';
	}
	else dfs(dep+1);
}
int main()
{
	freopen("bracket.in","r",stdin);
	freopen("bracket.out","w",stdout);
	n=read();k=read();
	cin>>st;
	dfs(1);
	write(ans%mod);
	return 0;
}

2021/10/25 13:33
加载中...