刚开始我对这道题有误解想着要用到所有的整数,原来不需要,只是用到它所提供的数就行了。没有动dfs。
/*
ID:m1519591
PROG: crypt1
LANG:C++
*/
#include<iostream>
#include<fstream>
using namespace std;
//ifstream cin("crypt1.in");
//ofstream cout("crypt1.out");
int hash[10]={0};
bool check(int n)
{
int flag=0;
while(n)
{
if(!hash[n%10])
return false;
n/=10;
}
return true;
}
int main()
{
int n,x,count=0;
int mil1=0,mil2=0,sum=0;
cin>>n;
for(int i=0;i<=n-1;i++)
{
cin>>x;
hash[x]=1;
}
for(int i=100;i<=999;i++)
{
if(!check(i))
continue;
for(int j=10;j<=99;j++)
{
if(!check(j))
continue;
sum=i*j;
if(sum<1000||sum>9999)
continue;
if(!check(sum))
continue;
mil1=i*(j%10);
if(mil1<100||mil1>999)
continue;
if(!check(mil1))
continue;
mil2=i*(j/10);
if(mil2<100||mil2>999)
continue;
if(!check(mil2))
continue;
count++;
}
}
cout<<count<<endl;
return 0;
}