#P17363. [ECNA 2024] Pascal Meets Boole
[ECNA 2024] Pascal Meets Boole
题目描述
许多人都熟悉杨辉三角(Pascal's Triangle),这个三角形整数排列以法国数学家兼哲学家 Blaise Pascal(1623–1662)命名。
从顶端开始把各行编号为 ,则第 行包含 个元素,从左到右编号为 。第 行的第 个和第 个元素都等于 ;当 且 时,第 行第 个元素等于第 行第 个与第 个元素之和。通俗地说,每个非边界元素都是它正上方两个元素之和。图 1(a) 展示了杨辉三角的前 行。
如果不用普通加法来组合数值,会怎样呢?由于边界元素都是比特 ,一种自然选择是使用任意二输入布尔函数——布尔函数得名于英国数学家兼哲学家 George Boole(1815–1864)。例如,下面真值表给出的布尔函数会生成图 1(b) 中的三角形,图中同样画出了前 行。表中的 分别对应第 行的第 、第 个元素, 是第 行所得的第 个元素。
一般地,把任意此类真值表最右列的比特从上到下记为 ,就可以用四位字符串 简洁表示一个二输入布尔函数。因此,上例函数表示为 1000。
请回答两类关于“Pascal–Boole 三角”的问题:
- 给定布尔函数 ,第 行第 个位置的比特是什么?
- 给定布尔函数 ,前 行一共有多少个 ?
:::align{center}
:::
输入格式
第一行包含一个整数 (),表示测试用例数量。
接下来的 行中,每行为以下两种形式之一:
-
B; -
N。
两种形式中, 都是表示二输入布尔函数的四位二进制字符串, 是满足 的整数。第一种形式中另有整数 ,满足 。
输出格式
对于形如 B 的测试用例,输出由 生成的 Pascal–Boole 三角中第 行第 个位置的比特。
对于形如 N 的测试用例,输出由 生成的 Pascal–Boole 三角前 行中 的总数。
3
1000 B 5 3
1111 N 7
0100 B 6 4
1
28
0