自学内容网 自学内容网

2023CSP-S复赛真题

密码锁

代码:

#include<bits/stdc++.h>

using namespace std;

int n;
int va[10][10];
int vb[10];
int sum;

int check()
{
for(int i=1;i<=n;i++)
{
vector<int > v;
for(int j=1;j<=5;j++)
{
if(va[i][j]!=vb[j]) v.push_back(j);
}
if(v.size()==0) return false;
if(v.size()>=3) return false;
if(v.size()==1) continue;
if(v.size()==2)
{
if(v[1]-v[0]>=2) return false;
int sum1 = va[i][v[0]]-vb[v[0]];
int sum2 = va[i][v[1]]-vb[v[1]];
int ned1 = (sum1%10+10)%10;
int ned2 = (sum2%10+10)%10;
if(ned1!=ned2) return false;
}
}
return true;
}

void dfs(int now)
{
if(now>5)
{
if(check()) sum++;
return ;
}
for(int i=0;i<=9;i++)
{
vb[now] = i;
dfs(now+1);
}
}

int main()
{
//freopen()
//freopen()
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=5;j++)
{
cin>>va[i][j];
}
}
dfs(1);
cout<<sum;
}

原文地址:https://blog.csdn.net/m0_52398496/article/details/142708095

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!