1. 程式人生 > 其它 >E - Arithmetic Number

E - Arithmetic Number

特判\(X \geq 10^9\)的情況
剩下情況暴力列舉

#include <bits/stdc++.h>
#define LL long long
using namespace std;
LL n;
int main() {
    scanf("%lld", &n);
    if (n >= 1e10) {
        LL x = n, len = 0;
        while (x) {len ++; x /= 10;}
        for (int num = 0; num <= 9; num ++ ) {
            LL ans = num;
            for (int i = 1; i < len; i ++ )
                ans = ans * 10 + num;
            if (ans >= n) {
                printf("%lld\n", ans);
                return 0;
            }
        }
    }
    else if (n >= 1e9){
        LL x = n, len = 0, res = 1e10;
        if (9876543210 >= n) res = 9876543210;
        while (x) {len ++; x /= 10;}
        for (int num = 0; num <= 9; num ++ ) {
            LL ans = num;
            for (int i = 1; i < len; i ++ )
                ans = ans * 10 + num;
            if (ans >= n) {
                res = min(ans, res);
                printf("%lld\n", res);
                return 0;
            }
        }
    }
    else {
        LL x = n, len = 0, res = 1e10;
        while (x) {len ++; x /= 10;}
        for (int d = 0; d <= 9; d ++ ) {
            for (int i = 0; i <= 9; i ++ ) {
                LL num = i;
                bool flag = 1;
                for (int j = 2; j <= len; j ++ ) {
                    if (d * (j - 1) + i >= 10)  {
                        flag = 0;
                        break;
                    }
                    num = num * 10 + (d * (j - 1) + i);
                }
                if (flag && num >= n)   res = min(res, num);
            }
            for (int i = 9; i >= 0; i -- ) {
                LL num = i;
                bool flag = 1;
                for (int j = 2; j <= len; j ++ ) {
                    if (i - d * (j - 1) < 0)  {
                        flag = 0;
                        break;
                    }
                    num = num * 10 + (i - d * (j - 1));
                }
                if (flag && num >= n)   res = min(res, num);
            }
        }
        printf("%lld\n", res);
    }
    return 0;
}