2024.7.24 test
A
给定序列 \(A\),满足对于 \(i\) 为奇数的 \(A_i=\frac{i+1}{2}\),\(i\) 为偶数的 \(A_{i}=n+1-\frac{i}{2}\)。
多次给出 \(s\),求有多少 \(l,r\in[1,n]\) 满足 \(\sum_{i=l}^rA_i=s\)。\(n\le 10^9,s\le 10^{18}\)。
简单分讨,判断 \(s\) 是否为 \(n+1\) 或 \(n+2\) 的倍数。
B
定义 \(f(x)=x\otimes 2^{popcount(x)}\),\(T\le 1e5\) 次询问 \([l,r]\) 里面有多少 \(y\) 满足存在 \(x\) 使 \(f(x)=y\),\(l,r<2^{64}\)。
考虑枚举 \(y\) 的 popcount,再枚举最高位限制到哪,没有最高位限制后用组合数算。
\(O(T\times 64^2)\)。
C
Alice 可以买 \(n\) 种商品花 \(c_i\) 购买第 \(i\) 种商品任意个。Bob 可以买 \(m\) 种其他的商品,每种需要 \(1\) 的代价。
Alice 不能花超过 \(k\) 元。Bob 不能花超过 \(m\) 元。\(n,c_i\le 100,,m,k\le 10^{18}\)。
询问 Alice 购买的方案数,使得 A 和 B 把商品标号相同的拿出来作为一堆石子玩 Nim 游戏可以必胜。
重点记录。
先转化为求序列 \(A\) 的个数,满足 \(\sum A_ic_i\le k\),且 \(\otimes A_i> m\)。
由于 \(k\) 太大,所以普通的背包因为复杂度带上 \(k\) 所以是不行的。
我们考虑数位 dp。 我们用竖式加法展开 \(\sum A_ic_i\),从低到高填,设已经确定了 \(c\) 的后 \(b\) 位。
那么还需要记录的是当前 \(\sum A_ic_i\) 的后 \(b\) 位与 \(k\) 后 \(b\) 位比较谁大;当前进位有多少,是不超过 \(\sum c\) 的。
\(\otimes A_i\) 更加简单,异或是没有进位的加法,从低到高填记录当前后 \(b\) 位与 \(m\) 后 \(b\) 位比较谁大。
于是状态数是 \(\log k\sum c\)。转移的话是一个背包,把 \(n\) 个物品插入 01 背包。
所以复杂度是 \(O(n\log k\sum c)\)。
D
给出序列 \(A\),\(q\) 次查询区间 \([l,r]\),可以操作一次使一个数乘上一个质数。\(n\le 2e5,A_i\le 5e6,q\le 1e6\)。
问最少操作次数使得某两数乘起来为平方数。
注意到一个数最多有 \(7\) 个不同的质因子。我们只保留次数为奇数的质因子。
两个数乘起来为平方数,那么因子完全相同。
扫描线,设当前扫到 \(A_i\),枚举其和别的平方数相等的是哪些因子,找出 \(A_j\) 拥有这个因子最大的 \(j\)。
注意到答案最多是 \(14\),所以我们找出 \(i\) 结尾的这 \(14\) 个答案极小的子区间,二维数点即可。

浙公网安备 33010602011771号