1 条题解

  • 0
    @ 2023-10-28 20:41:05
    #include <bits/stdc++.h>
    using namespace std;
    int n;
    int a[10][10]; //a[i][1] ~ a[i][5]
    int now[10]; //当前数的分解
    int d[10], dCnt; //每一位需要拨动的范围, d 非 0 的个数
    //检查 x 与 a[idx] 是否匹配
    bool check(int x, int idx)
    {
        now[1] = x;
        for(int i = 2; i <= 5; i++)
        {    
            now[i] = now[i - 1] / 10;
            now[i - 1] %= 10;
        }
        dCnt = 0;
        for(int i = 1; i <= 5; i++)
        {
            d[i] = now[i] - a[idx][i];
            if (d[i] < 0)
                d[i] += 10;
            if (d[i])
                dCnt ++;
        }
        if (dCnt == 0 || dCnt > 2)
            return false;
        if (dCnt == 1)
            return true;
        //两个不为 0 的数
        for (int i = 1; i <= 4; i++)
            if (d[i] && d[i] == d[i + 1])
                return true;
        return false;
    }
    int main()
    {
        freopen("lock.in", "r", stdin);
        freopen("lock.out", "w", stdout);
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin >> n;
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= 5; j++)
                cin >> a[i][j];
        int ans = 0;
        for (int i = 0; i <= 99999; i++)
        {
            bool flag = true;
            for (int j = 1; j <= n; j++)
            {
                if (!check(i,j))
                {
                    flag = false;
                    break;
                }
            }
            if (flag)
                ans++;
        }
        cout << ans << "\n";
        return 0;
    }
    
    • 1

    信息

    ID
    1351
    时间
    1000ms
    内存
    512MiB
    难度
    8
    标签
    递交数
    119
    已通过
    18
    上传者