2024.11.19 test
A
给定一个无限长序列的 \(0\sim n-1\) 项,每项满足与 \(n\) 的差不超过 \(1\)。
之后的每一项满足 \(a_i=\sum_{j=0}^{i-1}[a_j+j\ge i]\)。\(q\) 次询问第 \(p\) 个位置的值。\(p\le 10^{15}\)。
非常难的签到,考虑消去常数,将 \(a_i\) 全部减去 \(n\),那么 \(a_i=[a_{i-n-1}=1]-[a_{i-n}=-1]\)。
相当于一个长度 \(n+1\) 的环,每 \(n\) 步把每个 \(1\) 向右移动 \(1\) 的位置,如果 \(1\) 碰到 \(-1\) 就变为 \(0\)。
考虑给 \(-1\) 匹配 \(1\),然后查询的时候瞎几把分讨一下即可。
B
一张无向图,构造节点序列 \(v\),\(v\) 中元素互不相同,若长度为 \(k\),则 \(\sum a_{v_i}\ge k/2\)(向下取整),且满足 对于任意 \(i<k\),\(v_i,v_{(i+1)\bmod k}\) 有边。
\(n\le 500,m\le 2000,a_i\in[0,1]\)。
注意到 \(k=2\) 时相当于判边,条件是 \(a_u+a_v> 1\),消去常数,不妨令 \(a_i\gets a_i-0.5\)。
即条件是 \(a_u+a_v> 0\)。不妨令边权为 \(a_u+a_v\),即判断是否存在一个环满足边权和 \(\ge -(k\bmod 2)\)。
奇偶分讨,注意到 \(k\) 为偶数肯定不如只选一条边,所以只用判断 \(k\) 为奇数。
因为现在边权一定不为正数,所以考虑变成相反数,只需要找环使得边权和 \(\le 1\),且长度为奇数。
考虑奇偶拆点,只需要判断 \((u,0)\) 到 \((u,1)\) 的最短路是否 \(\le 1\) 即可。
C
一个 \(n\times n\) 的矩阵 \(A\),对于所有 \(1\sim n\) 的排列 \(p\),求 \(\otimes_{i=1}^n A_{i,p_i}\) 形成的集合。\(A_{i,j}\le 4095\)。
直接乱搞,考虑搜索,每次交换 \(p_i,p_j\),若形成的异或和不同就继续搜索下去;否则以 \(\frac{1}{2000}\) 的概率搜索下去即可。