社区讨论
这道题有什么其他解法吗
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 条回复,欢迎继续交流。
正在加载回复...