loading

AGC066B Decreasing Digit Sums

题意

给定整数 \(n=50\),构造一个正整数 \(x\),满足:

  • \(x\le 10^{10^4}\)
  • \(f(2^{i-1}x)>f(2^ix)\)
  • 其中 \(f(x)\) 表示 \(x\) 十进制下各数位之和

分析

过了一年还是什么都不会。

考虑从这题中发掘一些性质。一根很智慧的认识是 \(5\times 2=10\),由于我们的题目与数位和有关,所以 \(f(x\times 5\times 2)=f(x\times10)=f(x)\)

这时我们有一个错误的做法:构造 \(x=5^{50}000005^{49}0000\cdots0005^2000005\),也就是把 \(5\) 的幂次们用若干个 0 隔绝开来,0 的作用是防止进位。那么这个数乘以 2 后的结果即为 \(x=5^{49}00005^{48}0000\cdots5^{1}000010\),也就是 \(5^{50}\) 完全蒸发,然后生成了一个新 \(1\)

这个东西会发生错误的根本原因在于新生成的 1 在以后可能会生成 2,4,6,8 之类的数,会使整个数的 \(f\) 增加,以至于在某一时刻大于蒸发掉的数贡献的减少量。但这个东西不是好控制的,因此我们考虑让蒸发掉的数足够大,大到能抵消杂数贡献的增加量。估测 \(5^{200}\) 符合我们的要求,由于进位会使位数增加 1,所以两数之间的间隔 0 至少要 50 个。

构造的 python 代码:

ans=""
n=200
for hzrttl in range(1,51):
    ans=ans+str(5**n)
    for i in range(1,55):
        ans=ans+"0"
    n=n-1
print(ans)
posted @ 2025-05-28 16:59  dcytrl  阅读(17)  评论(1)    收藏  举报