做题记录 25.5.24

\(\textcolor{purple}\odot\) CF1841F Monocarp and a Strategic Game

设四种生物总数分别为 \(A,B,C,D\),则得分为 \((A-B)^2+(C-D)^2\)

\((a,b,c,d)\) 视为向量 \(p_i=(a-b,c-d)\),则等价于从给定的 \(n\) 个向量中选择若干个相加,最大化总和的模长的平方

AT_abc139_f [ABC139F] Engines \(\quad\) 代码

把这 \(n\) 个向量和这 \(n\) 个向量的相反向量按极角排序,令 \(S=\sum_i [\arg(p_i)>\arg(-p_i)]p_i\),则答案为排序后的前缀和加上 \(S\) 得到的 \(n\) 个向量中最大的模长的平方

时间复杂度 \(O(n\log n)\)

代码

参考

\(\textcolor{purple}\odot\) CF1840G2 In Search of Truth (Hard Version)

先随机 \(k\) 次,设随的过程中到达的最大值为 \(n_0\),则实际答案 \(n\ge n0\),且大概率 \(n-n_0\) 不会很大,假设 \(n_0\le n\le n_0+d\),令 \(s=\sqrt d\),则先移动 \(s\) 次一步,把过程中到达的位置记录下来,设第 \(i\) 次到达 \(p_i\),移动一次 \(n_0\) 步,之后每次移动 \(s\) 步,设当前为 \(k\) 次且存在 \(p_i\) 和当前到达的值相同,则 \(n=n_0+(k+1)s-i\)

交互次数为 \(k+2\sqrt d+O(1)\),取 \(k=400,d=90000-O(1)\) 可保证正确性

代码

参考

\(\textcolor{purple}\odot\) CF1838E Count Supersequences

总方案数为 \(k^m\),枚举 \(i=0\sim n-1\),减去匹配长度等于 \(i\) 的方案,选出匹配的位置的方案数为 \(\binom mi\),剩余位置形成 \(i+1\) 的区间,假设匹配位置选择的是最靠前的,那么第 \(i\) 个区间中不能包含 \(a_i\),即每个位置只有 \(k-1\) 中选择,总方案数为 \((k-1)^{m-i}\)

因此答案为 \(k^m-\sum_{i=0}^{n-1}\binom mi(k-1)^{m-i}\)

时间复杂度 \(O(\sum n)\)

代码

参考

\(\textcolor{blue}\odot\) CF1837F Editorial for Two

枚举分割点,二分答案,转化为在 \(O(\log n)\) 内求出从一个数集中选出总和不超过给定值的数最多能选择的数量,把 \(a\) 离散化后记在值域树状数组上,树状数组上二分即可

时间复杂度 \(O(\sum n\log n\log V)\)

代码

\(\textcolor{purple}\odot\) CF1835B Lottery

\(x\) 的权值等于

\[\begin{aligned} &\sum_{c=0}^m \left[\sum_{i=1}^n [v_i\in[c-|x-c|,c+|x-c|]]\right]\\ =&\sum_{c=0}^x \left[\sum_{i=1}^n [v_i\in[2c-x,x]]<k\right]+\sum_{c=x+1}^m \left[\sum_{i=1}^n [v_i\in[x,2c-x]]<k\right] \end{aligned} \]

前一项相当于在 \([2c-x,x]\) 中的 \(v\) 的数量小于 \(k\),因此 \(2c-x\) 大于小于等于 \(x\) 的第 \(k\) 大的数,后一项相当于 \(2c-x\) 小于大于等于 \(x\) 的第 \(k\) 小的数

\(v\) 排序,则给定一个 \(x\) 后容易 \(O(\log n)\) 求出其权值(二分出 \(2c-x\) 的范围从而得到 \(c\) 的范围)

假设排序后相邻两个 \(v\)\(l,r\),则 \((l,r)\)\(x\) 的权值单调,且值相同的区间长度不超过 \(2\)

因此取 \(0,m,v_i,v_i\pm1,v_i\pm2\) 带入 \(x\) 计算即可(需要判断是否在 \([0,m]\) 中)

时间复杂度 \(O(n\log n)\),精细实现可以做到排序部分 \(O\left(\frac{n\log V}{\log n}\right)\),排序部分外 \(O(n)\)

代码

\(\textcolor{purple}\odot\) CF1835C Twin Clusters

\(n=2^{k+1}\),若能找到 \(1\le l_1\le r_1\le n.1\le l_2\le r_2\le n,l_1\ne l_2,r_1\ne r_2,s_{l_1-1}\oplus s_{r_1}\oplus s_{l_2-1}\oplus s_{r_2}=0\),则可得到一组(取 \([l_1,r_1]\)\([l_2,r_2]\) 或两者的差即可)

\(s\)\(a\) 的前缀异或和数组,把 \(s\) 按高 \(k\) 位划分为 \(2^k\) 个等价类,则若 \(l_1,r_1\) 在同一等价类,\(l_2,r_2\) 在同一等价类,可保证 \(s_{l_1-1}\oplus s_{r_1}\oplus s_{l_2-1}\oplus s_{r_2}\) 的高 \(k\) 位为 \(0\),在此基础上只要 \(s_{l_1-1}\oplus s_{r_1}=s_{l_2-1}\oplus s_{r_2}\) 即可,此时其值一定在 \([0,2^k)\) 中,假设对于每个 \(r\) 都选择它之前与之在同一等价类中的最后一个元素作为 \(l\),则可选出至少 \(2^k+1\)\((l,r)\),这其中必然存在两组 \(s_{l-1}\oplus s_r\) 相同,因此一定存在解

时间复杂度 \(O(\sum 2^k)\)

代码

参考

posted @ 2025-05-25 07:49  Hstry  阅读(2)  评论(0)    收藏  举报