样例好像没问题,但全WA
查看原帖
样例好像没问题,但全WA
1233263
Phoenix114514楼主2024/7/1 22:32

大佬求调!QwQ

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=30;
int path[N],q[N],n;
bool flag,vis[N];
char e[3][N];
bool check(){
    int t=0;
    for (int i=n-1;i>=0;i--){
        int a=path[e[0][i]-'A'],b=path[e[1][i]-'A'],c=path[e[2][i]-'A'];
        if (a!=-1&&b!=-1&&c!=-1){
            if (t==-1){
                if ((a+b)%n!=c&&(a+b+1)%n!=c)return 0;
                if (!i&&(a+b>=n))return 0;
            }else{
                if ((a+b+t)%n!=c)return 0;
                if (!i&&(a+b+t>=n))return 0;
                t=(a+b+t)/n;
            }
        }else t=-1;
    }
    return 1;
}
bool dfs(int u){
    if (u==n)return true;
    for(int i=0;i<n;i++){
        if (!vis[i]){
            vis[i]=1;
            path[q[u]]=i;
            if (check()&&dfs(u+1))return true;
            vis[i]=0;
            path[q[u]]=-1;
        }
    }
    return 0;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>n;
    for (int i=0;i<3;i++)scanf("%s",e[i]);//cin>>e[i];
    for (int i=n-1,k=0;i>=0;i--){
        for (int j=0;j<3;j++){
            int t=e[j][i]-'A';
            if (!vis[t]){
                vis[t]=true;
                q[k++]=t;
            }
        }
    }
    memset(vis,0,sizeof(vis));
    memset(path,-1,sizeof(path));
    dfs(0);
    for (int i=0;i<n-1;i++)cout<<path[i]<<" ";
    cout<<path[n-1];
    return 0;
}
2024/7/1 22:32
加载中...