#ABC050CARC066A. 排队
排队
问题描述
有 个人,方便地编号为 到 。 他们昨天站成一排,但现在他们不确定他们站的顺序。 然而,每个人都记得以下事实:
-
站在那个人左边的人数和站在那个人右边的人数的绝对差异。
-
第 号人报告的两侧差人数异是 。
根据这些报告,找出他们可能的序列数量。
因为它可能非常大,所以输出答案模 。
请注意,报告可能不正确,因此可能没有符合要求的顺序。
在这种情况下,输出 0
。
数据规模
输入
输入来自标准输入,格式如下:
输出
输出他们所在的可能订单数,模 。
5
2 4 4 0 2
4
有四种可能的顺序,如下所示:
7
6 4 0 2 4 0 2
0
任何顺序都会与报告不一致,因此答案是 0
。
8
7 5 1 1 7 3 5 3
16
注:模mod
即取余%
运算,其对加减乘封闭且相容(即取值范围一致、同余关系在加减乘下被保持)。
如:
$[A\%m+B\%m]\%m=[(k_Am+b_A)\%m+(k_Bm+b_B)\%m]\%m=(b_A+b_B)\%m$
如:
$[A*B]\%m=[(k_Am+b_A)*(k_Bm+b_B)]\%m=[k_Ak_Bm^2+(k_Ab_B+k_Bb_A)m+b_Ab_B]\%m=b_Ab_B\%m$
$(A\%m)*(B\%m)\%m=[(k_Am+b_A)]\%m*[(k_Bm+b_B)\%m]\%m=b_Ab_B\%m$
你可以在本地用计算器按一下下面两个计算过程进行对比,显然前者需要保存更大的结果,超出了 int
和
本题取模的目的是为了避免过大的计算结果,通过取模将其控制在较小范围内。你只需要一边计算一边取模即可。
相关
在下列比赛中: