1 条题解

  • 0
    @ 2025-4-12 21:33:54

    C++ :

    #include <iostream>
    #include<cmath>
    using namespace std;
    #define ll unsigned long long
    ll X, K,L;
    const int MAX = 0x3f3f33f;
    ll **s; // 0:最小值  1:sum  2:max  3:min
    //求s[K][0]
    void cal(ll k,ll x)
    {
        s[k][1] = 0, s[k][2] = 0, s[k][3] = MAX;
        while (x)
        {
            s[k][1] += x % 10;
            s[k][2] = max(s[k][2], x % 10);
            s[k][3] = min(s[k][3], x % 10);
            x /= 10;
        }
    }
    void init()
    {
        int m=ceil(log(X+1)/log(10.0));
        L=m*81+9;
        if(L<171)
            L=171;
        s=new ll*[L+1];
        for(ll i=0; i<=L; i++)
        {
            s[i] = new ll[4];
            if(i==0)
            {
                s[0][0]=0;
                cal(0,X);
            }
            else
            {
                s[i][0] = MAX;
                cal(i,i);
            }
        }
    }
    void quancheng()
    {
        init();
        if (X == K)
        {
            cout<<"0"<<endl;
            return;
        }
        else if (K > L)
        {
            cout<<"No answer"<<endl;
            return;
        }
        bool flag = true;
        while (flag)
        {
            flag = false;
            for (int i = 0; i <= L; i++)
            {
                if (s[i][0] < MAX)
                {
                    for (int j = 0; j <= L; j++)
                    {
                        if (s[j][0] < MAX)
                        {
                            int a = s[i][1] * s[j][2] + s[j][3];
                            if (s[a][0] > s[i][0] + s[j][0] + 1)
                            {
                                s[a][0] = s[i][0] + s[j][0] + 1;
                                flag = true;
                            }
                        }
                    }
                }
            }
        }
        if (s[K][0] < MAX)
            cout<<s[K][0]<<endl;
        else
            cout<<"No answer"<<endl;
    }
    int main()
    {
        //freopen("input9.txt", "r", stdin);
        //freopen("output9.txt", "w", stdout);
        while (cin >> X >> K)
        {
            if (X == 0 && K == 0)
                break;
            quancheng();
        }
    }
    
    • 1

    信息

    ID
    743
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者