20pts求调
查看原帖
20pts求调
1341011
mmnBilibili楼主2025/2/6 15:02
#include<bits/stdc++.h>
using namespace std;

#define int long long

int n,ans;

char ges[10],g[25][10];

bool check(){
    for(int i=1;i<=n;i++){  //每个测试数据
    int err_bit,err_num=0;
            
        for(int j=1;j<=5;j++){     //逐位验证
            
            if(g[i][j]!=ges[j]){
                err_num++;
                // cerr<<err_num<<endl;
                if(err_num>2)return false;
                if(err_num==2){
                    if(err_bit+1!=j&&err_bit-1!=j)return false;
                    if((((int)(g[i][err_bit]-'0')-(int)(g[err_bit]-'0')+10)%10)!=(((int)(g[i][j]-'0')-(int)(ges[j]-'0')+10)%10))return false;
                }
                else if(err_num==1)err_bit=j;
            }
        }
    }
    return true;
}

void dfs(int deep){
    if(deep>5){
        if(check())ans++;
        return;
    }
    for(int i=0;i<=9;i++){
        ges[deep]=i+'0';
        dfs(deep+1);
    }
}

signed main(){

    cin>>n;

    for(int i=1;i<=n;i++)cin>>g[i][1]>>g[i][2]>>g[i][3]>>g[i][4]>>g[i][5];

    dfs(1);

    cout<<ans;

    return 0;
}
2025/2/6 15:02
加载中...