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})\)
标签:AtCoder,00,le,Beginner,sum,cnt,times,356,right From: https://www.cnblogs.com/2huk/p/18227019