CometOJ Contest #3 C

题目链接:https://cometoj.com/contest/38/problem/C?problem_id=1542&myself=0&result=0&page=1&contestID=38&problemID=C

题目大意:

  略

分析:

  已知原序列为 a1, a2……an

  设 b1, b2……bp 为原序列的一个子序列。

  定义 Ans(b1, b2……bp) 为对应序列的完美子序列种数。

  定义 Sum(b1, b2……bp) 为对应序列的所有非空子序列的整数之和。

  定义 Sum[b1, b2……bp] = b1 + b2……+ bp

 

  首先找一下规律:Sum(b1, b2……bp) = 2p-1 * Sum[b1, b2……bp]。

  设 x 为 m 中质因子 2 的个数。

  则 m 可写成:

$$
\begin{align*}
m &= 2^0 * q_0 \\
&= 2^1 * q_1 \\
&……… \\
&……… \\
&= 2^x * q_x
\end{align*}
$$

  如果序列 (b1, b2……bp) 是完美的,一定有 m | Sum(b1, b2……bp),也就是说一定有:

$$
\begin{align*}
&2^0 | 2^{p-1}\quad and\quad (m / 2^0) | Sum[b1, b2……bp] \\
or\ &2^1 | 2^{p-1}\quad and\quad (m / 2^1) | Sum[b1, b2……bp] \\
or\ &……………………………… \\
or\ &……………………………… \\
or\ &2^x | 2^{p-1}\quad and\quad (m / 2^x) | Sum[b1, b2……bp]
\end{align*}
$$

代码如下:

上一篇:前端 JavaScript 实现一个简易计算器


下一篇:LeetCode 427 Construct Quad Tree 解题报告