ABC D 求 Hack
  • 板块学术版
  • 楼主Neil_Qian_
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/28 21:54
  • 上次更新2023/10/28 22:02:47
查看原帖
ABC D 求 Hack
1016273
Neil_Qian_楼主2023/10/28 21:54
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
const ll N=15;
inline ll read(){
    ll x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9'){
        if(c=='-')
          f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9'){
        x=(x<<1)+(x<<3)+(c^48);
        c=getchar();
    }
    return x*f;
}
inline void write(ll x){
	if(x<0){
		putchar('-');
		x=-x;
	}
	if(x>9)
	  write(x/10);
	putchar(x%10+'0');
}
ll n;
ll a1[N][3],a2[N][3];
char s1[N],s2[N];
char k[N][N];
bool F=0;
bool check(){
	for(int i=0;i<n;i++)
	  if(a1[i][0]>1||a1[i][1]>1||a1[i][2]>1||a2[i][0]>1||a2[i][1]>1||a2[i][2]>1)
		return 1;
	return 0;
}
bool pd(){
	for(int i=0;i<n;i++)
	  if(!(a1[i][0]==1&&a1[i][1]==1&&a1[i][2]==1&&a2[i][0]==1&&a2[i][1]==1&&a2[i][2]==1))
	    return 0;
	return 1;
}
void DFS(ll x,ll y){
	if(F)
	  return ;
	if(x==n){
		if(pd())
		  F=1;
		return ;
	}
	if(!a1[x][0]&&!a2[y][0]){
		k[x][y]='A';
		a1[x][0]++,a2[y][0]++;
		if(y==(n-1))
		  DFS(x+1,1);
		else
		  DFS(x,y+1);
		a1[x][0]--,a2[y][0]--;
	}
	if(F)
	  return ;
	if(!a1[x][1]&&!a2[y][1]){
		k[x][y]='B';
		a1[x][1]++,a2[y][1]++;
		if(y==(n-1))
		  DFS(x+1,1);
		else
		  DFS(x,y+1);
		a1[x][1]--,a2[y][1]--;		
	}
	if(F)
	  return ;
	if(!a1[x][2]&&!a2[y][2]){
		k[x][y]='C';
		a1[x][2]++,a2[y][2]++;
		if(y==(n-1))
		  DFS(x+1,1);
		else
		  DFS(x,y+1);
		a1[x][2]--,a2[y][2]--;		
	}
	if(F)
	  return ;
	k[x][y]='.';
	if(y==(n-1))
	  DFS(x+1,1);
	else
	  DFS(x,y+1);	
}
void dfs(ll x,bool f){
	if(F)
	  return ;
	if(x==n){
		if(f)
		  dfs(0,!f);
		else
		  DFS(1,1);
		return ;
	}
	if(check()||F)
	  return ;
	if(f){
		k[x][0]='.';
		dfs(x+1,f);
		if(F)
		  return ;
		a1[x][s1[x]-'A']++;
		a2[0][s1[x]-'A']++;
		k[x][0]=s1[x];
		dfs(x+1,f);
		a1[x][s1[x]-'A']--;
		a2[0][s1[x]-'A']--;
	}
	else{
		k[0][x]='.';
		dfs(x+1,f);
		if(F)
		  return ;
		a1[0][s2[x]-'A']++;
		a2[x][s2[x]-'A']++;
		k[0][x]=s2[x];
		dfs(x+1,f);	
		a1[0][s2[x]-'A']--;	
		a2[x][s2[x]-'A']--;
	}
}
int main(){
	n=read();
	scanf("%s",s1);
	scanf("%s",s2);
	if(s1[0]!=s2[0]){
		puts("No");
		return 0;
	}
	dfs(0,1);
	if(!F){
		puts("No");
		return 0;		
	}
	puts("Yes");
	for(int i=0;i<n;i++)
	  printf("%s\n",k[i]);
	return 0;
}
2023/10/28 21:54
加载中...