Codeforces Adjacent Digit Sums

这是Codeforces Round 1004(Div.2)的第一题,题目链接

题目大意

题目给出了两个数 𝑥 和 𝑦,要求判断是否存在一个整数 𝑛,使得 𝑛 的各位数字之和等于 𝑥,且 𝑛+1 的各位数字之和等于 𝑦。

S(n) = x, S(n+1) = y

换句话说,你需要找到一个整数 𝑛,使得:

  1. 𝑛 的各位数字相加等于 𝑥。
  2. 𝑛+1 的各位数字相加等于 𝑦。

如果存在这样的 𝑛,输出“YES”;否则输出“NO”。

题解

  1. 对于n的个位数字不是9的,S(n+1) = S(n) + 1;
  2. 对于 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main(){
int T;
scanf("%d",&T);
while(T--){
int x,y;
scanf("%d%d",&x,&y);
int remainder = (x-y+1)%9;
if(remainder==0&&(x-y+1)/9>=0){
printf("YES\n");
}else {
printf("NO\n");
}
}
return 0;
}