首页 > 试题广场 >

小苯的计算式

[编程题]小苯的计算式
  • 热度指数:1334 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小苯有一个长度为 n 的字符串,其是一个两非负整数加法运算的式子,形如:A+B=C

现在小苯只记得这个式子的结果 C,以及式子的长度 n

请你帮小苯数一数,总共有多少个不同的符合条件的这种式子呢。
(注意:A, B, C 都是不含前导零的。)

输入描述:
输入包含一行两个正整数 n, C\ (5 \leq n \leq 20),\ (1 \leq C \leq 200000)。分别表示计算式的长度,以及计算式的结果值。


输出描述:
输出一行一个整数,表示不同的符合条件的计算式个数。
示例1

输入

5 2

输出

3

说明

长度为 5 的,运算结果为 2 的,只包含非负整数的不同运算式有:
0+2=2
1+1=2
2+0=2
这三个。

备注:
小苯认为两个计算式 s1, s2 不同:当且仅当 s1, s2 长度不相同,或两者长度相同均为 n 时,存在一个 i\ (1 \leq i \leq n),使得 s1_i \ne s2_i
暴力求解太没意思了,这里分享一个纯数学求解的思路(已通关):
首先考虑加法交换律,我们假设a>=b,那么a的最小值就是c的一半。
然后我们就只需要考虑无进位(c的长度和a相等)的情况和有进位(c的长度比a多1位)的情况。
既然a和c的长度确定了,b的长度也就确定了。
由于b越大a越小,b越小a越大。我们直接计算边界值就能得到合法算式的数量。
将无进位情况和有进位情况的合法算式数量相加,然后乘2(加法交换律)
假如a+a=c是合法算式,就还要减1
就得到结果了。
发表于 2025-11-21 13:29:45 回复(1)