USACO-Section1.3 Prime Cryptarithm [搜索]

来源:互联网 发布:javascript实现trie树 编辑:程序博客网 时间:2024/06/05 15:26

2017-5-27

题目描述

给你几个数字,求出给定等式中数字都在这几个数中的数的个数

解答

深搜,深度只要到5即可

代码

/*ID: 18795871PROG: crypt1LANG: C++*/#include<iostream>#include<fstream>#include<cstring>using namespace std;ifstream fin("crypt1.in");ofstream fout("crypt1.out");bool f[10];int x[10],j,sum=0,p,q,r;int cal1(int n){    int r=0;    while (n){        r++;        n/=10;    }    return r;}bool cal2(int n){    while (n){        if (!f[n%10]) return false;        n/=10;    }    return true;}bool res(){    p=(100*x[1]+10*x[2]+x[3])*x[5];    q=(100*x[1]+10*x[2]+x[3])*x[4];    r=10*q+p;    if (cal1(p)==3&&cal2(p)&&cal1(q)==3&&cal2(q)&&cal1(r)==4&&cal2(r)) return true;    return false;}void dfs(int step){    if (step==6){        if (res()){            sum++;        }        return ;    }    for (int i=1;i<=9;i++){        if (f[i]){            x[step]=i;            dfs(step+1);        }    }}int main(){    int n,m;    j=0;    fin>>n;    memset(f,false,sizeof(f));    memset(x,0,sizeof(x));    for (int i=1;i<=n;i++){        fin>>m;        f[m]=true;    }    dfs(1);    fout<<sum<<endl;    return 0;}