社区讨论

妹子刚学oi,QwQ求助搜索1WA 1T

P1092[NOIP 2004 提高组] 虫食算参与者 13已保存回复 22

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
22 条
当前快照
1 份
快照标识符
@mi7xjac0
此快照首次捕获于
2025/11/21 05:14
4 个月前
此快照最后确认于
2025/11/21 06:50
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int n;
int m[200];
char a[220],b[220],c[220];
int vis[220];
void dfs_2(int dep,int add);
void dfs_1(int dep,int add){
	if(dep>n-1){
		for(int i='A';i<='A'+n-1;i++){
			cout<<m[i]<<" ";
		}
		cout<<endl;
		exit(0);
	}
	if(m[a[dep]]>-1){
		dfs_2(dep,add);
		return;
	}
	for(int i=0;i<=n-1;i++){
		if(!vis[i]){
			vis[i]=1;
			m[a[dep]]=i;
			dfs_2(dep,add);
			m[a[dep]]=-1;
			vis[i]=0;
		}
	}
}
void dfs_2(int dep,int add){
	int p1=m[a[dep]],p2,ans=m[c[dep]];
	if(m[b[dep]]>-1){
		p2=m[b[dep]];
		if((p1+p2+add)%n==ans){
			dfs_1(dep+1,(p1+p2+add)/n);
		}
		else if(ans==-1 && !vis[(p1+p2+add)%n] ){
			ans=m[c[dep]]=(p1+p2+add);
			vis[(p1+p2+add)%n]=1;
			m[c[dep]]%=n;
			dfs_1(dep+1,(p1+p2+add)/n);
			vis[(p1+p2+add)%n]=0;
			ans=m[c[dep]]=-1;
		}
		return;
	}
	for(int i=0;i<=n-1;i++){
		if(!vis[i]){
			vis[i]=1;
			p2=m[b[dep]]=i;
			if((p1+p2+add)%n==ans){
				dfs_1(dep+1,(p1+p2+add)/n);
			}
			else if(ans==-1 && !vis[(p1+p2+add)%n] ){
				ans=m[c[dep]]=(p1+p2+add);
				vis[(p1+p2+add)%n]=1;
				m[c[dep]]%=n;
				dfs_1(dep+1,(p1+p2+add)/n);
				ans=m[c[dep]]=-1;
				vis[(p1+p2+add)%n]=0;
			}
			vis[i]=0;
			p2=m[b[dep]]=-1;
		}
	}
}
int main(){
	scanf("%d",&n);
	for(int i=n-1;i>=0;i--){
		scanf(" %c",&a[i]);
	}
	for(int i=n-1;i>=0;i--){
		scanf(" %c",&b[i]);
	}
	for(int i=n-1;i>=0;i--){
		scanf(" %c",&c[i]);
	}
	for(int i='A';i<='Z';i++) m[i]=-1; 
	dfs_1(0,0);
	return 0;
}
写的好像有点毒瘤但是确实卡不过去了QAQ
WA数据:
CPP
12
FDALHECBJKGI
LIKAEDGJBCFH
IJJAFLICDLFE
[救救孩子吧.gif]

回复

22 条回复,欢迎继续交流。

正在加载回复...