社区讨论

这道题有什么其他解法吗

P9752[CSP-S 2023] 密码锁参与者 14已保存回复 21

讨论操作

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

当前回复
21 条
当前快照
1 份
快照标识符
@lo10o0k6
此快照首次捕获于
2023/10/22 13:16
2 年前
此快照最后确认于
2023/11/02 11:55
2 年前
查看原帖
我的解法就是搜索,10分钟写完就过了,你们有没有更快的做法awa
CPP
#include <bits/stdc++.h>
using namespace std;
int n,a[105][105],b[105],cnt[114514],ans;
void dfs(int id,int step){
	if(step==2){
		int x=0;
		for(int i = 1;i <= 5;i++)x=x*10+a[id][i];
		cnt[x]++;
		return;
	}
	for(int i = 1;i <= 5;i++){
		for(int j = 0;j <= 9;j++){
			if(a[id][i]==j)continue;
			int last=a[id][i];
			a[id][i]=j;
			dfs(id,step+1);
			a[id][i]=last;
		}
	}
	for(int i = 1;i <= 4;i++){
		for(int j = 1;j <= 9;j++){
			if((a[id][i]+j)%10==a[id][i]&&(a[id][i+1]+j)%10==a[id][i+1])continue;
			int last=a[id][i],last1=a[id][i+1];
			a[id][i]=(a[id][i]+j)%10;
			a[id][i+1]=(a[id][i+1]+j)%10;
			dfs(id,step+1);
			a[id][i]=last,a[id][i+1]=last1;
		}
	}
}
int main(){
	cin >> n;
	for(int i = 1;i <= n;i++)
		for(int j = 1;j <= 5;j++)
			cin >> a[i][j];
	for(int i = 1;i <= n;i++)dfs(i,1);
	for(int i = 0;i <= 100000;i++)
		if(cnt[i]==n)
			ans++;
	cout << ans;
	return 0;
}

回复

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

正在加载回复...