結果
| 問題 | No.2246 1333-like Number | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2023-04-04 19:36:45 | 
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 208 ms / 2,000 ms | 
| コード長 | 1,397 bytes | 
| コンパイル時間 | 268 ms | 
| コンパイル使用メモリ | 12,800 KB | 
| 実行使用メモリ | 12,544 KB | 
| 最終ジャッジ日時 | 2024-10-01 10:25:21 | 
| 合計ジャッジ時間 | 3,525 ms | 
| ジャッジサーバーID (参考情報) | judge5 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 24 | 
ソースコード
import sys
import math
N = int(input())
c, remainder = divmod(N, 36)
# 36の倍数 → 商をひとつ下げる。
if remainder == 0:
    c -= 1
# NOTE: dict ではなく list にしたほうがカッコイイけど、
#       余りの値: a, b という対応にしたほうが分かりやすいと思ったので。
a, b = {
    1: (1, 2),
    2: (1, 3),
    3: (1, 4),
    4: (1, 5),
    5: (1, 6),
    6: (1, 7),
    7: (1, 8),
    8: (1, 9),
    9: (2, 3),
    10: (2, 4),
    11: (2, 5),
    12: (2, 6),
    13: (2, 7),
    14: (2, 8),
    15: (2, 9),
    16: (3, 4),
    17: (3, 5),
    18: (3, 6),
    19: (3, 7),
    20: (3, 8),
    21: (3, 9),
    22: (4, 5),
    23: (4, 6),
    24: (4, 7),
    25: (4, 8),
    26: (4, 9),
    27: (5, 6),
    28: (5, 7),
    29: (5, 8),
    30: (5, 9),
    31: (6, 7),
    32: (6, 8),
    33: (6, 9),
    34: (7, 8),
    35: (7, 9),
    0: (8, 9),
}[remainder]
def calculate_answer(a: int, b: int, c: int) -> int:
    """
    'うしっぽい数' とやらを作成する。
    """
    x = 10 * a + b
    for _ in range(c):
        x = 10 * x + b
    return x
answer = calculate_answer(a, b, c)
# 最近の Python は、4300桁以降を str 変換できない。
# 桁数を求めて……
digits = math.ceil(math.log10(answer + 1))
if digits >= 4300:
    # ……制限を変更する。
    sys.set_int_max_str_digits(digits)
print(answer)
            
            
            
        