NOI2026 做题记录
没想到有一天我也会开始写这玩意
CF1299E
题目大意是可以询问一个集合 \(S\) 中是否满足 \(\sum{S} \equiv 0 \mod |S|\) 其中 \(n <= 800\) 要求次数是 \(18\times n\)
先考虑一个当 \(n <= 18\) 时的 \(O(n^2)\) 算法。
由于 \(\frac{n\times(n+1)}{2} \equiv 1 \mod (n - 1)\)
所以考虑查询 \(\{1,2,3,…,n \}\setminus \{i\}\) 就可以查出 \(a_i=1 \mod (n-1)\) 的位置,然后把 \(1,n\) 随便赋给两个位置
现在考虑一个过程,我们现在已知了 \([1,k] \bigcap [n-k+1,n]\) 的位置,然后现在要找 \(k+1,n-k\) 的位置
就查询全集减去当前已知的和 \(i\),若查询结果为 \(1\),则当前位置就是 \(k+1,n-k\)
然后又因为 \(n\) 一定是偶数,因此 \(k+1,n-k\) 奇偶性不同,所以可以通过查询和 \(1\) 的和的结果查询当前数是否是奇数来得到是 \(k+1\) 还是 \(n+k\)
得到了 \(O(n^2)\) 做法
CRT 做法看不懂,说一下倍增。
按 \(\bmod 2^i\) 的余数分类,那么每次查找的时候只需要在对应等价类里面查找
这样因为单个等价类里面最多 \(\frac{n}{2^i}\) 个数,那么总查询次数的量级也是来到 \(n\log(n)\)
然后考虑如何从 \(2^t\) 跳到 \(2^{t+1}\)
假设知道了 \(a_i\bmod 2^t\) 和 \(1,2,\dots,2^{t+1}\) 的位置后,令 \(t\to t+1\)。
设 \(a_i\equiv r_i\pmod {2^t}\),由 \(\frac{(1+2^{t+1})2^{t+1}}{2}\equiv 2^t\pmod {2^{t+1}}\),询问 \(\{1,2,\dots,2^{t+1}\}\backslash \{r_i\}\cup {a_i}\),若返回 \(0\) 则 \(a_i\equiv r_i\pmod {2^{t+1}}\),否则为 \(r_i+2^t\)。
总查询次数最坏为为 \(3n\log(n)\) 有点过不去,然后可以在每次询问时 random_shuffle 一下,这样期望次数变为 \(\frac{1}{2}\),总次数期望为 \(2n\log(n)\) 约为 \(18n\) 可过
CF1942G
神秘格路计数
设 \(x\) 表示剩下的抽奖次数,由题意可以看出初始的 \(x=5\),\(x\) 变化量就是手牌上抽奖次数 \(-1\)。不难发现 \(1\) 的牌不会对 \(x\) 造成影响,而且原题目算的是概率而不是方案,可以直接不看,特殊牌可以看成“特殊的0牌”
现在就相当于是说有 \(a+5\) 次 \(-1\),\(c\) 次 \(+1\),问你是否能在 \(x=0\) 之前收集其中的五张特殊牌。
考虑求不合法概率,就是当 \(x=0\) 时还没有集齐特殊卡。
枚举抽了 \(i\) 次之后第一次 \(x=0\) 此时不合法。现在就是一个很典的格鲁问题,\((0,5)\) 走到 \((i-1,1)\) 每次只能右下或右上,且不能碰到 \(y=0\) 的点,随便 chuan 两下就可以了
CF1967E1
暴力 DP 可以考虑贪心 若 \(b_{i-1}+1=a_i\) 则令 \(b_i=b_{i-1}-1\) 否则 \(b_i=b_{i-1}+1\)
设 \(dp_{i,j}\) 表示前 \(i\) 个数且 \(b_i=j\) 的方案数
于是就有 \(dp_{i,j}=dp_{i-1,j-1}\times (m-1)+dp_{i-1,j+1}\),题意就转化为从 (0,0) 走到 (x,y) 每次可以向右下或向右上走
博弈论笔记
一张 DAG 起点处有一个棋子,玩家轮流操作,每次可以移动棋子到相邻位置,不能操作的人输。
定义 \(sg_x = mex(sg_y)\) 其中 \(y\) 为 \(x\) 相邻节点。当 \(sg_x\) 为 0 则是必败态,否则是必胜态。
多张 DAG,每张 DAG 上起点处有一个棋子,玩家轮流操作,每次可以移动棋子到相邻位置,每张 DAG 都不能操作的人输。
总体 SG 值为每张 DAG 的异或和,当 \(SG\) 为 0 则是必败态,否则是必胜态。
但是要注意别搞错了什么时候用 mex 合并,什么时候用异或合并

浙公网安备 33010602011771号