dfs只过了前三个点,求助dalao
查看原帖
dfs只过了前三个点,求助dalao
1255776
Mr_user楼主2024/1/23 16:10
#include <bits/stdc++.h>
#define int long long
using namespace std;
#define endl '\n'
const int N=10;
int arr[N],ans=0;

void dfs(int a,int b){
    if(to_string(a).size()==3&&to_string(b).size()==2){
        if(to_string(a*b).size()!=4) return;
        else {
            string t=to_string(a*b),s=to_string(a*(b%10)),d=to_string(a*(b/10));
            for(int i=0;i<t.size();i++)
                if(!arr[t[i]-'0']) return;
            //cout<<a*b<<endl;
            for(int i=0;i<s.size();i++)
                if(!arr[s[i]-'0']) return;
            for(int i=0;i<d.size();i++)
                if(!arr[d[i]-'0']) return;
            ans++;
            return;
        }
    }
    for(int i=1;i<=9;i++){
        if(arr[i]){
            if(to_string(a).size()<3)
                dfs(a*10+i,b);
            else dfs(a,b*10+i);
        }
    }
}

signed main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        int temp;
        cin>>temp;
        arr[temp]=1;
    }
    dfs(0,0);
    cout<<ans<<endl;
    return 0;
}
2024/1/23 16:10
加载中...