#P16862. [SGU442]X + R(X) = N

[SGU442]X + R(X) = N

  • 来源:SGU 442
  • 难度估计:CF 2700 左右(2600~2800)
  • 类型:数位构造 / 进位分析 / 组合计数 / 高精度
  • 时间限制:0.75 s
  • 空间限制:262144 KB

入选理由

NN 最多可有约 1000010000 位,因此不可能枚举 XX,甚至不能把 NN 放入普通整数类型。

核心难点是从 NN 的首尾向中间推导十进制加法中的进位:当 XX 的位数确定后,每一对对称数位的“未进位和”实际上被强制确定。之后还需要计算每个数位和对应多少种有序数字对,并处理最高位不能为零、中间位、自身对称以及 X=N1|X|=|N|-1 等特殊情况。最终方案数本身也可能极大,需要高精度整数。

这是一道典型的“结构观察比代码模板更重要”的高难数位构造题。

题目描述

对于一个正整数 XX,定义 R(X)R(X) 为把 XX 的十进制数字顺序反转后得到的整数。

例如:

R(123)=321,R(123)=321, R(150)=51.R(150)=51.

现在给定一个正整数 NN,请计算有多少个正整数 XX 满足

X+R(X)=N.X+R(X)=N.

输入格式

输入包含多组测试数据。

每组测试数据占一行,包含一个正整数 NN

一行只包含单个 0 时表示输入结束,该行不需要处理。

NN 可能非常大,最多约有 1000010000 个十进制数字,因此必须以字符串形式读入。

输出格式

对于每组测试数据,输出一行一个整数,表示满足

X+R(X)=NX+R(X)=N

的正整数 XX 的个数。

不要输出前导零。

样例输入

1
2
11
13
14003
767513456469789456166547987979741366664879441
0

样例输出

0
1
1
0
60
0

说明

由于答案也可能远超 64 位整数范围,因此实现时需要支持任意精度非负整数计数。