简单dp只能输出0求助
查看原帖
简单dp只能输出0求助
901086
rand_Zq楼主2024/8/20 19:11
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+5,mod=998244353;
int T,n,dp[N][2];
char a[N];
struct matrix{
    int a[4][4];
    matrix(){
        memset(a,0,sizeof(a));
    }
}mul[N];
matrix operator*(matrix a,matrix b){
    matrix c;
    for(int i=1;i<=3;i++){
        for(int j=1;j<=3;j++){
            for(int k=1;k<=3;k++){
                c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j])%mod;
            }
        }
    }
    return c;
}
signed main(){
    cin>>n>>T;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(a[i]=='0'){
            mul[i].a[1][1]=mul[i].a[1][2]=mul[i].a[1][3]=mul[i].a[2][2]=mul[i].a[3][3]=1;
        }
        if(a[i]=='1'){
            mul[i].a[1][1]=mul[i].a[2][1]=mul[i].a[2][2]=mul[i].a[2][3]=mul[i].a[3][3]=1;
        }
        if(a[i]=='?'){
            mul[i].a[1][1]=mul[i].a[1][2]=mul[i].a[1][3]=mul[i].a[2][1]=mul[i].a[2][2]=mul[i].a[2][3]=mul[i].a[3][3]=1;
        }
    }
    for(int i;T--;){
        char x;
        cin>>i>>x,a[i]=x;
        if(a[i]=='0'){
            mul[i].a[1][1]=mul[i].a[1][2]=mul[i].a[1][3]=mul[i].a[2][2]=mul[i].a[3][3]=1;
        }
        if(a[i]=='1'){
            mul[i].a[1][1]=mul[i].a[2][1]=mul[i].a[2][2]=mul[i].a[2][3]=mul[i].a[3][3]=1;
        }
        if(a[i]=='?'){
            mul[i].a[1][1]=mul[i].a[1][2]=mul[i].a[1][3]=mul[i].a[2][1]=mul[i].a[2][2]=mul[i].a[2][3]=mul[i].a[3][3]=1;
        }
        matrix ret;
        ret.a[3][1]=1;
        for(int j=1;j<=n;j++){
            ret=ret*mul[j];
        }
        cout<<(ret.a[1][1]+ret.a[2][1])%mod<<'\n';
    }
}
2024/8/20 19:11
加载中...