比赛 EYOI暨SBOI暑假快乐赛5th 评测结果 AAATTTTTTT
题目名称 Famil Door and Brackets 最终得分 30
用户昵称 ZRQ 运行时间 14.013 s
代码语言 C++ 内存使用 5.92 MiB
提交时间 2022-06-29 11:26:49
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=100005,Mod=1e9+7;
int n,m;
long long ans;
char s[N],p[N];
bool check()
{
	int k=0;
	for(int i=1;i<=n;++i)
	{
		if(p[i]=='(') ++k;
		else if(p[i]==')')
		{
			if(k>0) --k;
			else return 0;
		}
	}
	if(k==0) return 1;
	return 0;
}
void DFS(int nw)
{
	if(nw==n+1)
	{
		if(check()) ++ans;
		return ; 
	}
	if(!p[nw])
	{
		p[nw]='('; DFS(nw+1); p[nw]=0; 
		p[nw]=')'; DFS(nw+1); p[nw]=0;
	}
	else DFS(nw+1);
	return ;
}
int main()
{
	freopen("tribrackets.in","r",stdin);
	freopen("tribrackets.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=m;++i) cin>>s[i];
	for(int i=1;i<=n-m+1;++i)
	{
		for(int j=0;j<m;++j)
			p[i+j]=s[j+1];
		DFS(1);
		ans%=Mod;
		memset(p,0,sizeof(p));
	} 
	printf("%lld\n",ans%Mod);
	return 0;
}