AcWing 1351. 密码锁
原题链接
简单
作者:
Soñador
,
2024-11-13 19:51:55
,
所有人可见
,
阅读 4
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N =55;
int a[N],b[N];
int n;
int single()//判断单个密码匹配方案数
{
int res=1;
for(int i=0;i<3;i++)
res*=min(n,5);//注意总的可选密码位不一定有5位
return res;
}
int both()
{
int res=1;
for(int i=0;i<3;i++)
{
int x=a[i],y=b[i];
int d1=abs(x-y);//环上的数有两个距离
int d2=n-abs(x-y);
res*=min(max(0,5-d1)+max(0,5-d2),n);//两个环上都要计算,有可能两个环上都有符合要求的数
}
return res;
}
int main()
{
cin>>n;
for(int i=0;i<3;i++) cin>>a[i];
for(int i=0;i<3;i++) cin>>b[i];
cout<<single()*2-both();//交集加了两遍,需要减去一遍
return 0;
}