比赛 EYOI暨SBOI暑假快乐赛5th 评测结果 AAATTTTTTT
题目名称 Famil Door and Brackets 最终得分 30
用户昵称 nick 运行时间 14.013 s
代码语言 C++ 内存使用 5.93 MiB
提交时间 2022-06-29 11:31:25
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+1;
int n,m,ans; 
char a[N],b[N];
bool yx()
{
    int t=0;
    for(int i=1;i<=n;i++)
    {
        if(b[i]=='(')t++;
        if(b[i]==')')
        {
            if(t>0)t--;
            else return 0;
        }
    }
    if(t==0)return 1;
    else return 0;
}
void ss(int x)
{
    if(x==n+1)
    {
        if(yx())
            ans++;
        return;
    }
    if(b[x]=='*')
    {
        b[x]='(';
        ss(x+1);
        b[x]=')';
        ss(x+1);
        b[x]='*';
    }
    else ss(x+1);
}
int main(){
    freopen("tribrackets.in","r",stdin);
    freopen("tribrackets.out","w",stdout);
    cin>>n>>m;
    if(n%2==1)
    {
        cout<<0<<endl;
        return 0;
    }
    for(int i=1;i<=m;i++)cin>>a[i];
    for(int i=1;i<=m;i++)b[i]=a[i];
    if(n==m&&yx())
    {
        cout<<1<<endl;
        return 0;
    }
    for(int i=m+1;i<=n;i++)b[i]='*';
    for(int i=1;i<=n-m+1;i++)
    {
        ss(1);
        for(int j=i+m;j>=i;j--)
            b[j+1]=b[j];
        b[i]='*';
    }
    cout<<ans<<endl;
    return 0;
}