[USACO1.3]牛式 Prime Cryptarithm
阿新 • • 發佈:2018-12-13
大意
給定一些數字問下面這個方程的解中只包含這些數字的方案數
思路
因為這一陀最多是999,然後我們乘法結合+分配一下發現就是乘上一個二位數,這個時候我們列舉一下就好了啦。
程式碼
/*
ID:hzbismy1
LANG:C++
TASK:crypt1
*/
#include<cstdio>
using namespace std;bool ok[10];int n,a,t1,t2,t3,ans;
inline bool check(register int x){while(x){if(!ok[x%10])return false;x/=10;}return true;}
signed main()
{
freopen("crypt1.in","r",stdin);
freopen("crypt1.out","w",stdout);
scanf("%d" ,&n);
for(register int i=1;i<=n;i++) scanf("%d",&a),ok[a]=1;
for(register int i=111;i<1000;i++)//列舉乘數
{
if(!check(i)) continue;
for(register int j=11;j<99;j++)//列舉乘數
{
if(!check(j)) continue;
t1=i*(j%10);t2=i*(j/10);t3=t1+(t2<<3)+(t2<<1);
if(!check(t1)||!check(t2) ||!check(t3)) continue;//判斷一下合不合法
if(t1>999||t3>9999)continue;//判斷一下有沒有超出範圍
ans++;
}
}
printf("%d\n",ans);//輸出
}