5 条题解

  • 1
    @ 2024-12-8 22:37:52

    正正正正正解

    #include<bits/stdc++.h>
    #define int long long
    #define PII pair<int,int>
    #define ULL unsigned long long
    #define all(v) v.begin(), v.end()
    #define debug(a) cout<<#a<<"="<<a<<endl;
    using namespace std;
    constexpr int N =  1 * 1e6 + 10,M = 5 * 1e3 + 10,inf = 0x3f3f3f3f;
    
    int path[N],bin[N];
    bool st[N];
    set<PII> ans;
    void dfs2(int u,int sum)
    {
        if(sum > 9) return;
        if(u == 3)
        {
            if(sum == 9)
            {
                int num[3] = {0},l = 0 , r = bin[0];
                for(int i=0;i<3;i++)
                {
                    for(int j=l;j<r;j++)
                    {
                        num[i] += path[j];
                        num[i] *= 10;
                    }
                    num[i] /= 10;
                    l += bin[i];
                    r += bin[i+1];
                }
                // cout << num[0] << ' ' << num[1] << ' ' << num[2] << '\n';
                sort(num,num+3,greater<int>());
                if(num[0] == num[1]*num[2])
                {
                    // printf("%d = %d x %d\n",num[0],num[1],num[2]);
                    ans.insert({num[0],num[1]});
                }
            }
            return;
        }
        for(int i=1;i<=9;i++)
        {
            bin[u] = i;
            dfs2(u+1,sum+i);
        }
    }
    void dfs1(int u)
    {
        if(u==9)
        {
            dfs2(0,0);
            return;
        }
        for(int i=1;i<=9;i++)
        {
            if(st[i]) continue;
            st[i] = 1;
            path[u] = i;
            dfs1(u+1);
            st[i] = 0;
        }
    }
    void solve()
    {
        dfs1(0);
        vector<PII> res;
        res.assign(all(ans));
        swap(res[1],res[2]);
        swap(res[3],res[4]);
        for(auto [a,b] : res)
        {
            printf("%d = %d x %d\n",a,a/b,b);
        }
    }
    signed main()
    {
        ios::sync_with_stdio(0);cin.tie(nullptr),cout.tie(nullptr);
        int _=1;
        // cin>>_;
        while(_--)
        {
            solve();
        }
        return 0;
    }
    
    /**
     *    author: Nijika_jia
     *    created: 2024.12.08 17:58:10
     */
    ```
    
    
    ```

信息

ID
4
时间
1000ms
内存
256MiB
难度
8
标签
递交数
16
已通过
7
上传者