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)