AtCoder Beginner Contest 356

Contest

从比赛开始第三分钟开始记:

  • 00:00~00:02:A 题。

  • 00:02~00:07:B 题。

  • 00:07~00:16:C 题。

  • 00:16~00:43:D 题。

  • 00:43~01:02:E 题。

  • 01:02~结束:摆烂。

A - Subsegment Reverse

  • 给定 \(n, l, r\)。输出将序列 \(A = (1, 2, \dots, n)\)\([l, r]\) 翻转后的样子。
  • \(l \le r \le n \le 100\)

模拟。可以用 reverse 函数。

B - Nutrients

  • \(m\) 种营养成分。对于第 \(i\) 种营养成分,他的目标是每天摄入至少 \(A_i\) 单位。今天,他吃了 \(n\) 种食物,从第 \(i\) 种食物中摄入了 \(X_{i, j}\) 单位的营养成分 \(j\)。判断他是否满足了所有 \(m\) 种营养成分的目标。
  • \(n, m \le 100\)\(A_i, X_{i, j} \le 10^7\)

\(m\) 个桶维护每种营养的数量。

C - Keys

  • 你有 \(n\) 把编号为 \(1, 2, \dots, n\) 的钥匙。其中一些是真正的钥匙,而其他的是假钥匙。

    有一扇门,你可以插入任意数量的钥匙。只有当至少插入 \(k\) 把真正的钥匙时,门才会打开。

    你对这些钥匙进行了 \(m\) 次测试。第 \(i\) 次测试如下:

    • 你向门插入了 \(c_i\) 把钥匙 \(a_{i, 1}, a_{i, 2}, \dots, a_{i, c_i}\)

    • 测试结果用一个英文字母 \(r_i\) 表示:

      • $r_i = $ o表示第 \(i\) 次测试时门X打开了。

      • $r_i = $ x表示第 \(i\) 次测试时门X没有打开。

    \(2^n\) 种可能的组合,确定哪些是真正的钥匙,哪些是假钥匙。在这些组合中,找出不与任何测试结果矛盾的组合数量。

  • \(k, n \le 15\)\(m \le 100\)

\(2^n\) 暴力枚举每种钥匙是不是真的。检查即可。

D - Masked Popcount

  • 给定 \(n, m\),求 \(\sum\limits_{i=0}^n \operatorname{popcount}(k \And m)\)
  • \(n, m \le 2^{60} - 1\)

\(x_i\) 表示 \(x\) 的第 \(i\) 个二进制位。

逐二进制考虑。若当前枚举位 \(i\),我们需要计算:

有多少 \(x \in [0, n]\) 使得 \((x \And m)_i = 1\)

\(m\) 是个定值。如果 \(m_i = 0\),那么显然上述答案为 \(0\)。否则上述答案为:

有多少 \(x \in [0, n]\) 使得 \(x_i = 1\)

类似于数位 DP。拆贡献答案为:

\[\left(\sum_{j=i+1}^{\infty} a_j \times 2^{j-1}\right) + a_i \times \left(1 + \sum_{j=0}^{i-1} a_j \times 2^j\right) \]

E - Max/Min

  • 给定 \(n, a_1\dots a_n\)。求 \(\sum\limits_{i=1}^{n-1}\sum\limits_{j=i+1}^n \left \lfloor \dfrac{\max(a_i, a_j)}{\min(a_i, a_j)} \right \rfloor\)
  • \(n \le 2 \times 10^5\)\(a_i \le 10^6\)

首先可以统计 \(a\) 中每种元素的出现次数 \(cnt_i\),然后将 \(a\) 排序并去重。令 \(b_1 \dots b_m\) 为去重后的 \(a\),那么答案为:

\[\begin{aligned}\sum\limits_{i=1}^{n-1}\sum\limits_{j=i+1}^n \left \lfloor \dfrac{\max(a_i, a_j)}{\min(a_i, a_j)} \right \rfloor &=\sum_{i=1}^{m-1}\sum_{j=i+1}^m cnt_{b_i} \times cnt_{b_j} \times \left \lfloor\frac{b_i}{b_j} \right \rfloor\\ &=\sum_{j=2}^{m}\sum_{i=1}^{j-1} cnt_{b_i} \times cnt_{b_j} \times \left \lfloor\dfrac{b_i}{b_j} \right \rfloor\\ &=\sum_{j=2}^{m}cnt_{b_j} \times \sum_{i=1}^{j-1} cnt_{b_i} \times \left \lfloor\dfrac{b_i}{b_j} \right \rfloor\\ \end{aligned} \]

后面这坨预处理 \(cnt_i\) 前缀和并整除分块。总时间复杂度 \(\mathcal O(n \sqrt {a_i})\)

posted @ 2024-06-02 13:22  2huk  阅读(88)  评论(0编辑  收藏  举报