ST1 40分求调
  • 板块学术版
  • 楼主Times_New_man
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/21 23:35
  • 上次更新2023/11/2 12:04:00
查看原帖
ST1 40分求调
165766
Times_New_man楼主2023/10/21 23:35

思路:根据第一行确定所有81种可能,再对照其余行看是否符合,符合则ans++.

//Name:		lock.cpp
//Author:	AH-S00154
//Last Ver.:2023-10-21 15:07
//Target:	100pts
#include<iostream>
using namespace std;

long long n,ans=0;
int a[9][6],cur[6];

inline bool check(){
	for(int i=1;i<n;++i){
		int flag=-1,cnt=0,step=-1;
		for(int j=0;j<5;++j){
			if(a[i][j]!=cur[j]){
				cnt++;
				if(cnt>=3) return false;
				if(flag==-1){
					flag=j;
					step=cur[j]-a[i][j];
				}
				else if(j+1!=flag&&j-1!=flag) return false;
				else if(cur[j]-a[i][j]!=step) return false;
			}
		}
	}
	return true;
}

int main(){
	//ifstream fin("lock.in");
	cin>>n;
	for(int i=0;i<n;++i)
	cin>>a[i][0]>>a[i][1]>>a[i][2]>>a[i][3]>>a[i][4];
	//fin.close();
	for(int i=0;i<5;++i) cur[i]=a[0][i];
	for(int i=0;i<5;++i){
		for(int k=1;k<=9;++k){
			cur[i]=(a[0][i]+k)%10;
			if(check()) ans++;
		}
		cur[i]=a[0][i];
	}
	for(int i=0;i<=3;++i){
		for(int k=1;k<=9;++k){
			cur[i]=(a[0][i]+k)%10;
			cur[(i+1)%5]=(a[0][(i+1)%5]+1)%10;
			if(check()) ans++;
		}
	}
	//ofstream fout("lock.out");
	cout<<ans;
	//fout.close();
	return 0;
}
2023/10/21 23:35
加载中...