Codeforces Adjacent Digit Sums
Codeforces Adjacent Digit Sums
这是Codeforces Round 1004(Div.2)
的第一题,题目链接。
题目大意
题目给出了两个数 𝑥 和 𝑦,要求判断是否存在一个整数 𝑛,使得 𝑛 的各位数字之和等于 𝑥,且 𝑛+1 的各位数字之和等于 𝑦。
S(n) = x, S(n+1) = y
换句话说,你需要找到一个整数 𝑛,使得:
- 𝑛 的各位数字相加等于 𝑥。
- 𝑛+1 的各位数字相加等于 𝑦。
如果存在这样的 𝑛,输出“YES”;否则输出“NO”。
题解
- 对于n的个位数字不是9的,
S(n+1) = S(n) + 1
; - 对于 n 的个位数字是 9 的,假设从个位开始有连续的 k 个 9,那么
S(n+1) = S(n) + 1 - k*9
,因为从个位开始加上 1 后连续的 k 个 9 都会变成0,最后的进1贡献为1。
归纳如果 k = 0 即为情况1。
将 x 和 y 替换到等式里, y = x + 1 - k*9, k = (x-y+1)/9。
只需判断k是否为大于等于0的整数即可。
代码
1 | int main(){ |
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Comments