专栏文章
题解:CF2109C3 Hacking Numbers (Hard Version)
CF2109C3题解参与者 3已保存评论 2
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mip26zo4
- 此快照首次捕获于
- 2025/12/03 04:57 3 个月前
- 此快照最后确认于
- 2025/12/03 04:57 3 个月前
首先我们给出此题两步得到 的方案:
CPPmul 999999999
digit
演绎法证明别的题解都有了。但是如果直接去想这个 ,十分困难。这里提供一种非常规做法,仅适用于在 IOI 赛制下或已知 时写出此题。
考虑到把 C2 的代码交进去会有 WA on #1,则 。接下来先构造一个 的做法。
易证 digit 是必须使用的,否在加乘除无法完成这么复杂的运算。易证 digit 不在第三步,否则当 时无法完成。易证第一步不是 digit。假设第一步为 digit,则得到此时有 ,然后通过两次操作变为指定的 ,很假。综上,第二步为 digit。
我们注意到 digit 以后只能有一个答案,否则无法归纳到 。于是我们注意到最后一步应为 add,而 digit 之后得到的 一定不变,这里称之为 。那么 digit 之前所得的数的各位数字之和一定不变。
考虑无论是 add 还是 div 都不太能将一个数变成各位数字一定的数,因此考虑 mul 操作。我们将需要 mul 的数称为 。
这个数是啥呢,好难猜啊。
那不如打表了。
易证 ,那么在这个范围内进行暴力枚举。首先找一个随机的数组,然后比较数组的前两个数与 相乘的结果,若各位数字之和相等,则比较后面两个数,以此类推。如果你的数组足够随机,最后只会得到 。然后这个时候去归纳或者演绎证明,即可得到 是正确的。
后记
我的朋友:这个题怎么是蓝啊,应该升黑。
直到我写完这篇题解我才意识到为什么会有人标蓝。
相关推荐
评论
共 2 条评论,欢迎与作者交流。
正在加载评论...