社区讨论

80pts求调

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

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@lo0ufoxd
此快照首次捕获于
2023/10/22 10:22
2 年前
此快照最后确认于
2023/11/02 12:03
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e2+5;
int n,ans;
int a[maxn][maxn],p[maxn],come[maxn];
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=5;j++){
			scanf("%d",&a[i][j]);
		}
	}
	memset(p,0,sizeof(p));
	for(p[1]=0;p[1]<=9;p[1]++) 
		for(p[2]=0;p[2]<=9;p[2]++) 
			for(p[3]=0;p[3]<=9;p[3]++) 
				for(p[4]=0;p[4]<=9;p[4]++) 
					for(p[5]=0;p[5]<=9;p[5]++){
						memset(come,0,sizeof(come));
						for(int k=1;k<=n;k++){
							int	flag=0;
							for(int i=1;i<=5;i++){
								if(p[i]!=a[k][i]) flag++;
							}
							if(flag==1) come[k]=1;
						}
						int	f1=0,f2=0,flag=0;
						for(int k=1;k<=n;k++){
							if(come[k]) continue;
							for(int i=1;i<=4;i++){
								if(p[i]!=a[k][i] && p[i+1]!=a[k][i+1]) f1++;
							}
							for(int i=1;i<=5;i++) {
								if(p[i]!=a[k][i]) f2++;
							}
							if(f1!=1 || f2!=2){
								flag=1;
								break;
							}
						}
						if(flag) continue;
						int sum=1;
						for(int k=1;k<=n;k++){
							if(come[k]) continue;
							flag=0;
							for(int i=1;i<=4;i++){
								if(p[i]!=a[k][i] && p[i+1]!=a[k][i+1]){
									int h=abs(p[i]-a[k][i]+1);
									if((p[i+1]+h)%10==a[k][i+1]) flag=1;
									break;
								}
							}
							if(!flag){
								sum=0;
								break;
							}
						}
						if(sum) ans++;
					}
	printf("%d\n",ans);
	return 0;
}

回复

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

正在加载回复...