考场上一心打这一题的爆搜,结果调到这里的时候出现了问题,计算机显示无法运行,就在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;
}