1 条题解

  • 0
    @ 2026-4-2 23:24:42

    题目详细题解

    题意理解

    题目要求判断一个整数 aa 是否可能是由 10x10^xx2x \ge 2)漏掉乘方符号 ^ 后写成的数字。

    例如:

    • 105=10000010^5 = 100000,漏掉 ^ 后写成 105105(不是 100000100000,而是把指数 55 直接拼接在 1010 后面)
    • 101910^{19} 漏掉 ^ 后写成 10191019

    关键点:原始重要整数是 10x10^x,写错后的形式是:先写 1010,然后紧接着写 xx 这个数字(不写乘方符号)。

    数字形式分析

    设写错后的数字为 aa,那么 aa 必须满足:

    1. 以 "10" 开头 —— 因为原始数字是 1010 后面直接拼接指数 xx
    2. "10" 后面跟着的是指数 xx 的十进制表示

    因此 aa 的形式必须是:字符 '1' 后跟字符 '0',再跟一个整数 xxx2x \ge 2)的十进制数字串。

    分情况讨论

    情况1:aa 的总长度为 33

    此时 a=10xa = 10x,其中 xx 是一位数字(0099)。
    由于 x2x \ge 2,所以 xx 可以取 2,3,,92,3,\dots,9
    对应的 aa 取值范围:102a109102 \le a \le 109

    情况2:aa 的总长度 4\ge 4

    此时 xx 至少是两位数(x10x \ge 10)。
    aa 的形式为:1010 后面跟着 xx 的十进制表示。

    • 最小的 xx1010,此时 a=1010a = 1010
    • 题目给定 a10000a \le 10000,所以 aa 最大为 1000010000
    • xx 最大可以是多少?aa 最多 44 位或 55 位?
      实际上 a10000a \le 10000,所以 aa 可能是 44 位或 55 位:
      • aa44 位:10xy10xyxx 是两位数,aa 范围 1010101010991099
      • aa55 位:10xyz10xyzxx 是三位数,最小 100100,此时 a=10100a = 10100,但 10100>1000010100 > 10000,超出范围

    因此对于 a10000a \le 10000,只有 1010a10991010 \le a \le 1099 符合条件。

    最终判断条件

    综合以上两种情况,一个整数 aa 是合法的当且仅当:

    $$102 \le a \le 109 \quad \text{或} \quad 1010 \le a \le 1099 $$

    代码解析

    for _ in range(int(input())):
        a = int(input())
        if 102 <= a <= 109 or 1010 <= a <= 1099:
            print("YES")
        else:
            print("NO")
    

    示例验证

    输入:

    7
    100
    1010
    101
    105
    2033
    1019
    1002
    

    输出:

    • 100100:不以 "10" 开头?实际以 "10" 开头,但长度为 33 时第三位是 00,不满足 x2x \ge 2 → NO
    • 10101010:属于 1010a10991010 \le a \le 1099 → YES
    • 101101:长度 33,第三位是 11,不满足 x2x \ge 2 → NO
    • 105105:长度 33,第三位是 525 \ge 2 → YES
    • 20332033:不以 "10" 开头 → NO
    • 10191019:属于 1010a10991010 \le a \le 1099 → YES
    • 10021002:以 "10" 开头,但长度为 44,第三位是 00x=02x = 02 有前导零,不合法 → NO

    与题目示例输出一致。

    • 1

    信息

    ID
    6297
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    1
    已通过
    1
    上传者