CSP-S T1 密码锁 40 WA 求调
  • 板块学术版
  • 楼主qinghaipeng
  • 当前回复17
  • 已保存回复17
  • 发布时间2023/10/22 06:59
  • 上次更新2023/11/3 19:26:09
查看原帖
CSP-S T1 密码锁 40 WA 求调
690333
qinghaipeng楼主2023/10/22 06:59

在线等,寄。

#include<iostream>
#include<cstdio>
#include<map>
#include<queue>
#include<cstring>
#include<cmath>
//#define int long long
#define F(i,j,n) for(register int i=j;i<=n;++i)
using namespace std;
const int N=3e5+50;
const bool debug=0;
int n;
int a[15][15];
int b[15];
bool CAN[15][N];//第一维是满足第几个状态  第二维是数字   值表示是否满足
signed main(){
//	freopen("lock.in","r",stdin);
//	freopen("lock.out","w",stdout);
	scanf("%d",&n);
	F(i,1,n){
		F(j,1,5){
			scanf("%d",&a[i][j]);
		}
	}
	if(n==1){//每一个都转  或者相邻两个转 
		cout<<5*9+(5-1)*9;//其实就是 81 
	}else{//O(稍大常数) 
		F(i,1,n){//n 个要满足的数 第 1 种转动方式 
			b[i]=
			a[i][1]*10000+a[i][2]*1000+a[i][3]*100+a[i][4]*10+a[i][5];
			F(j,0,4){//五个位置 
				for(register int k=0;k<=9;++k){//十个数码 
					CAN[i][int(
					b[i]+int(pow(10,j)*k)%int(pow(10,j+1))
					)]=1;
//					cout<<"j"<<int(pow(10,j)*k)%int(pow(10,j+1));
				}
			}
			F(j,0,4){//五个位置 第 2 种转动方式 
				for(register int k=0;k<=9;++k){//十个数码 
					CAN[i][int(
					b[i]+int(pow(10,j)*k)%int(pow(10,j+1))
						+int(pow(10,(j+1)%5)*k)%int(pow(10,(j+2)%5))
					)]=1;
//					cout<<"j"<<int(pow(10,j)*k)%int(pow(10,j+1));
				}
			}
		}
//		F(i,1,n){
//			cout<<"hng"<<CAN[i][00115];
//		}
//		puts("");
		register int ans=0;
		F(j,0,99999){
			bool YES=1;
			F(i,1,n){
				if(!CAN[i][j]){
					YES=0;
				}
			}
			if(YES){
				++ans;
//				printf(" %d ",j);
			}
		}
		printf("%d",ans-1);//不知道为什么每一组的样例都是大 1 
	}
//	system("pause");
// S 组的 Win7 好烦人啊,还有答辩输入法要切换来切换去 
	return 0;
}
/*
in
1
0 0 1 1 5
out
81
*/
2023/10/22 06:59
加载中...