只有两个测试点 WA 了,求助(玄关)
查看原帖
只有两个测试点 WA 了,求助(玄关)
1286983
HangingMirror楼主2024/9/3 15:22

只有两个测试点 WA 了,求助。谢谢。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

// 计算一个数的位数
ll digitCount(ll number) {
    ll count = 0;
    while (number > 0) {
        count++;
        number /= 10;
    }
    return count;
}

// 生成第1类好数
ll generateType1GoodNumber(ll x, ll digitLength) {
    for (int digit = 0; digit <= 9; ++digit) {
        ll candidate = 0;
        for (int pos = 1; pos <= digitLength; ++pos) {
            candidate = candidate * 10 + digit;
        }
        if (candidate >= x) {
            return candidate;
        }
    }
    return -1; // 这行代码理论上不会执行
}

// 生成第2类好数
ll generateType2GoodNumber(ll x, ll digitLength) {
    ll minGoodNumber = LLONG_MAX;

    for (int uniqueDigit = 0; uniqueDigit <= 9; ++uniqueDigit) {
        for (int sameDigit = 0; sameDigit <= 9; ++sameDigit) {
            if (uniqueDigit == sameDigit) continue; // 忽略相同的数字
            
            for (int uniquePosition = 1; uniquePosition <= digitLength; ++uniquePosition) {
                if (uniqueDigit == 0 && uniquePosition == 1) continue; // 避免前导零

                ll candidate = 0;
                for (int pos = 1; pos < uniquePosition; ++pos) {
                    candidate = candidate * 10 + sameDigit;
                }
                candidate = candidate * 10 + uniqueDigit;
                for (int pos = uniquePosition + 1; pos <= digitLength; ++pos) {
                    candidate = candidate * 10 + sameDigit;
                }

                if (candidate >= x) {
                    minGoodNumber = min(minGoodNumber, candidate);
                }
            }
        }
    }
    return minGoodNumber;
}

int main() {
    ll x, k;
    cin >> x >> k;

    ll digitLength = digitCount(x);

    if (k == 0) {
        cout << generateType1GoodNumber(x, digitLength);
    } else {
        cout << generateType2GoodNumber(x, digitLength);
    }

    return 0;
}
2024/9/3 15:22
加载中...