萌妹子求助
查看原帖
萌妹子求助
91737
rex_qwq楼主2023/10/7 09:47

样例没过,求助dalao

#include<bits/stdc++.h>
// #pragma GCC optimize(3,"Ofast,no-stack-protector,unroll-loops,fast-math")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,fma,popcnt,tune=native")
using namespace std;
#define int  long long
#define kg putchar(' ')
#define endl puts("")
inline int read(){
    int vis=1,ans=0;
    char x=getchar();
    while(x<'0'||x>'9'){
        if(x=='-')vis=-1;
        x=getchar();
    }
    while(x>='0'&&x<='9'){
        ans=ans*10+x-'0';
        x=getchar();
    }
    return vis*ans;
}
inline void print(int x){
    if(x<0)putchar('-'),x=-x;
    if(x>9)print(x/10);
    putchar(x%10+'0');
}
const int N=590,mod=1e9+7;
int dp[N][N][6];
int n=read(),K=read();
string s;
inline bool check(int l,int r){return (s[l]!='*'&&s[r]!='*')&&(s[l]!=')'&&s[r]!='(');}
inline void Mod(int l,int r,int x){for(int i=x;i<6;i++)dp[l][r][i]%=mod;}
signed main(){
    cin>>s;
    s=" "+s;
    for(int i=1;i<=n;i++){
        dp[i][i-1][0]=1;
    }
    for(int i=1;i<=n;i++){
        int l=i,r=i;
        dp[l][r][0]=(1+(s[r]=='*'||s[r]=='?')==2);
    }
    for(int i=2;i<=n;i++){
        for(int j=1;j+i-1<=n;j++){
            int l=j,r=j+i-1;
            if(i<=K)dp[l][r][0]=(dp[l][r-1][0]+(s[r]!='('&&s[r]!=')')==2);
            if(check(l,r)){
                dp[l][r][1]=(dp[l+1][r-1][0]+dp[l+1][r-1][2]+dp[l+1][r-1][3]+dp[l+1][r-1][5]);
            }
            for(int k=l;k<r;k++){
                dp[l][r][2]+=(dp[l][k][3]*dp[k+1][r][0]);
                dp[l][r][3]+=(dp[l][k][2]+dp[l][k][3])*dp[k+1][r][1];
                dp[l][r][4]+=(dp[l][k][5]*dp[k+1][r][0]);
                dp[l][r][5]+=(dp[l][k][4]+dp[l][k][5])*dp[k+1][r][1];
                Mod(l,r,2);
            }
            dp[l][r][4]+=dp[l][r][0];
            dp[l][r][3]+=dp[l][r][1];
            Mod(l,r,0);
        }
    }
    print(dp[1][n][3]);
    return 0;
}
/*
dp[l][r][0]表示全是 **********
dp[l][r][1]表示 (...........)
dp[l][r][2]表示(..........).....(....)*****
dp[l][r][3]表示(.....).....(....)
dp[l][r][4]表示******(.......)........(......)*******
dp[l][r][5]表示*****(......)....(....)
*/
2023/10/7 09:47
加载中...