比赛 EYOI暨SBOI暑假快乐赛3rd 评测结果 WWWTTWTTWTTTTTTTTTTT
题目名称 括号序列 最终得分 0
用户昵称 ┭┮﹏┭┮ 运行时间 15.026 s
代码语言 C++ 内存使用 4.59 MiB
提交时间 2022-06-27 10:59:31
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const long long N = 1000000007;
long long s;
int n,m,k,top;
char a[510],t[510];
bool py(){
    top = 0;
    if(a[1] == '*' || a[n] == '*')return 0;
    for(int i = 1;i <= n;i++){
        if(a[i] == '(' || a[i] == '*'){
            top++;
            t[top] = a[i];
        }
        else if(a[i] == ')'){
            while(t[top] != '('){
                if(top == 0)return 0;
                top--;
            }
            top--;
            if(t[top] == '*' && a[i+1] == '*')return 0;
        }
    }
    while(t[top] == '*')top--;
    if(top == 0){
      return 1; 
    }
    return 0;
}
void sou(int x,int y){
    int i = x;
    if(y > m)return;
    if(x == n+1 || (x == n && a[n] != '?')){
        if(py()){
            s += 1;
            s %= N;
        }
        return;
    }
    if(a[x] != '?'){
        for(i = x;a[i] != '?';i++);
    }
    a[i] = '*';
    sou(i+1,y+1);
    a[i] = '?';
    a[i] = '(';
    sou(i+1,y);
    a[i] = '?';
    a[i] = ')';
    sou(i+1,y);
    a[i] = '?';
}
int main(){
    freopen("2021bracket.in","r",stdin);
    freopen("2021bracket.out","w",stdout);
    cin>>n>>m;
    scanf("%s",a+1);
    for(int i = 1;i <= n;i++){
        if(a[i] == '*')k++;
    }
    sou(1,k);
    cout<<s<<endl;
    
    return 0;
}