1350. 密码运算【难度: 一般 / 知识点: 枚举】

在这里插入图片描述
https://www.acwing.com/problem/content/description/1352/

#include<bits/stdc++.h>
using namespace std;
unordered_map<int,int>mp;
int n,x,cnt;
bool check(int x)
{
    
    
    while(x) 
    {
    
    
        if(!mp[x%10]) return false;
        x/=10;
    }
    return true;
}
void solve(int m)
{
    
    
    if(!check(m)) return ;
    for(int i=11;i<=99;i++) 
    {
    
    
        if(m%i!=0||!check(i)) continue;
        else
        {
    
    
            int a=m/i;
            string s1=to_string(a);
            string s3=to_string(a*(i%10));
            string s4=to_string(a*(i/10));
            if(s1.size()!=3) continue;//不是三位数
            if(s3.size()!=3) continue;//不是三位数
            if(s4.size()!=3) continue;//不是三位数
            if(check(a)&&check(a*(i%10))&&check(a*(i/10))) cnt++;
        }
    }
}
int main(void)
{
    
    
    cin>>n;
    for(int i=0;i<n;i++) cin>>x,mp[x]++;
    for(int i=1111;i<=9999;i++) solve(i);
    cout<<cnt<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_46527915/article/details/121153481