最绝望的死法 - only WA on #4
查看原帖
最绝望的死法 - only WA on #4
1530321
Wzmois楼主2025/7/22 09:55

神秘的边界问题。。。

改好了此贴就当作警士后人了。。。

4.in4.in

1 1
0

4.out4.out:

1

4.代码输出4.代码输出:

2
#include<bits/stdc++.h>
using namespace std;
int a[14];//第 i 行的初始状态
int f[14][5000];
int n,m;
int num[5000],idx;//可用状态
int cnt[5000];//状态 i 的 1 的个数
bool check(int x){return x&(x<<1);}
void init(){
    for(int i=0;i<(1<<m);i++) if(!check(i)) num[++idx]=i;
    for(int i=1,x;i<=idx;x=num[++i]) while(x) x=x&(x-1),cnt[i]++;
    for(int i=1;i<=idx;i++) f[1][num[i]]=1;
}
int main(){
    cin>>n>>m;
    init();
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            int x;
            cin>>x;
            a[i]+=(((x)?0:1)<<(m-j));
        }
    }
    int mod=pow(10,8);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=idx;j++){
            if(a[i]&num[j]) continue;
            for(int k=1;k<=idx;k++){
                if(num[j]&num[k] or a[i-1]&num[k]) continue;
                f[i][num[j]]+=(f[i-1][num[k]]);
                f[i][num[j]]%=mod;
                // cout<<i<<" "<<num[j]<<" "<<f[i][cnt[j]]<<endl;
            }
        }
    }
    int sum=0;
    for(int i=0;i<(1<<m);i++){
        sum=(sum+f[n][i])%mod;
    }
    cout<<sum%mod;
    return 0;
}
2025/7/22 09:55
加载中...