CSP-S 2023 T1:密码锁·题解
2023-11-03 19:06:00
发布于:浙江
162阅读
0回复
0点赞
思路:
题目给出密码锁锁车后的 n
个错误的状态,要解出所有可能是正确密码的方案数。
读入数据后,枚举所有可能性并判断,因为 n
最大是 8
,故最大时间复杂度不会超过时间限制。
在 check
函数里遍历 n
个状态并判断,有一个可以就能算成功,函数末尾再遍历,有不成功的直接返回 0
,否则返回 1
。
最后输出答案数即可。
别忘记freopen&fclose,ACGO是文件判题的。
代码:
#include<bits/stdc++.h>
using namespace std;
int pw[10][5],n,ans;
bool check2(int a[],int b[]){
for(int i=0;i<5;i++) if(a[i]!=b[i]) return 0;
return 1;
}
bool check(int a,int b,int c,int d,int e){
int nums[5]={a,b,c,d,e},s[10]={},num,num2;
for(int i=0;i<n;i++){
int flag=0;
for(int j=0;j<5;j++){
for(int a=1;a<=9;a++){
num=nums[j],nums[j]=(num+a)%10;
if(check2(pw[i],nums)) flag=1;
if(j<4){
num2=nums[j+1],nums[j+1]=(num2+a)%10;
if(check2(pw[i],nums)) flag=1;
nums[j+1]=num2;
}
nums[j]=num;
}
}
if(flag) s[i]=1;
}
for(int i=0;i<n;i++) if(s[i]==0) return 0;
return 1;
}
int main(){
freopen("lock.in","r",stdin);
freopen("lock.out","w",stdout);
cin>>n;
for(int i=0;i<n;i++) for(int j=0;j<5;j++) cin>>pw[i][j];
for(int i=0;i<=9;i++)
for(int j=0;j<=9;j++)
for(int k=0;k<=9;k++)
for(int l=0;l<=9;l++)
for(int m=0;m<=9;m++)
if(check(i,j,k,l,m)) ans++;
cout<<ans;
fclose(stdin);
fclose(stdout);
return 0;
}
全部评论 3
其实fclose加了只是保险一点,但有时不加会MLE。
2024-10-22 来自 广东
0真暴力
2024-08-06 来自 浙江
0听不懂思密达
2024-08-03 来自 上海
0
有帮助,赞一个