2022NOIP前集训

20221004

T1

不需要卡常的卡常题。
首先 \(p\) 数组一看就能去掉。
然后把删除反过来,变成后缀最小值。
有结论是从 \(1\) 开始的最长上升子序列只有 \(\log\) ,所以复杂度就是 \(log^2\) 的。

T2

显而易见的按照 小于、等于、大于 分成 \(0,1,2\) 。要求最后留下 \(1\)
因为 \(1\)\(2\) 是可以直接去掉 \(2\) 的,所以 \(0\) 才是影响答案的因素。
首先连着的 \(0\) 缩成一个,然后如果 \(0\) 的个数大于等于 \(1+2\) 的个数就 No
证明考虑一个 \(0\) 至少会抵消掉一个 \(1\)\(2\) ,这是必要性。
只要每次消三个,保证至少有一个 \(0\) 就能做到上面的效果。这是充分性。

写的时候先把连续的 \(0\) 缩起来,然后找到一个等于 \(m\) 的,左边缩一次右边缩一次即可。
……比较粗略但是手玩一下容易懂。

T3

没想到啊……提示的部分分竟然是最小的一档……

一个简单的暴力是 \(O(4^mn)\) 的 DP 。 加上 \(n=1\) 可以拿到 \(40\) pts 。
毫无提示价值的部分分

一个有提示价值的部分分是 \(m=1\) ,将一个自由位取出后其他位任意取,该位取 0/1 中有且仅有一个合法方案。
启示我们找一个自由位计算贡献。

考虑另外一种 DP:设 \(f_{i,j,S,0/1}\) 为对从高到低前 \(i\) 位,第 \(i\) 位处理到第 \(j\) 个数,取值范围的状态为 \(S\) ,当前位的异或和为 \(0/1\) 的方案数。
\(S\) 的状态有三种:1 靠左边界、 2 不靠左边界但靠右边界、 3 自由 。
其中 1 可以转到 2 或 3 ,区别在于转的时间不同;2 可以转到 3.

考虑枚举最高位且最靠前的自由位计算贡献,其较低位由其他数的取值情况确定,因此其他数的较低位任意取。
枚举自由位出现在哪个数,处理其前面的数要求不出现自由位,后面的数随意。
前者是不需要 DP 求的,因为情况唯一;后者要 DP……

20221005

绝对不能再让 XC 组题了!

T1

ARC013D
经典的折线
为了去重,钦定接触 \(y=0\) 的折线贡献。

T2

先是基础的贪心,从后往前能不取就不取。
然后有结论是不取的段是 \(O(\sqrt V)\) 的,所以把暴力改成线段树的话复杂度就是 \(O(n \sqrt V \log n)\) 的。

T3

小常数做法:
扔到 dfn 序上,先算出 \(h_i\) ,然后记录 前缀/后缀/子树 内的最小值及出现次数判断是否贡献。

T4

Splay 维护链,链的特殊形式决定了它可以用 \(x+y\) 排序。
但事实上也不必加这个 key 值,直接合并时确定好顺序,Splay 在维护过程中是不会改变的。

20221007

T1

签到,贪心取最长链为只走一次。

T2

DP 硬上(?)
\(f_{i,S,S'}\) 为从高往低前 \(i\) 位,是否贴上界的状态为 \(S\) ,是否大于前一项的状态为 \(S'\)
暴力 DP,中间的转移可以预处理,复杂度 \(2^{21} \times 500\)

T3

容斥,\(| S_x \, \cup \, S_y | = |S_x| + |S_y| - |S_x \, \cap \, S_y|\)
考虑计算后者,设 \(p_i\)\(i\) 左侧第一个 \(x\) 满足 \(a_x \ge a_i\) ,那么一个数 \(x\) 被包含在 \(S_y\) 里当且仅当 \(p_x <y \le x\) ,扫描线即可。

20221018(20221019)

jz题。质量还不错?

T1

先写出一个很基础的暴力,然后发现 \(a_i>0\)\(T\) 的增长是指数级别的,因此去掉 \(a_i=0\) 之外的答案不会很大。

那么把这一部分算出来,再双指针合并一下 \(a_i=0\) 的答案即可。

T2

将变化关系写出来发现是若干个环,且用题设条件知 \(x\)\(p-x\) 一定不在同一环内。
枚举破环成链之后方案是固定的,\(O(1)\) 计算变化即可。

其实没有题设条件也可以做,单环甚至比双环要好做。

把单环像双环一样缩起来,与双环的区别在于有一条特殊边,而这条特殊边的贡献是确定的,其他也可以扫一遍算贡献。

T3

容斥,扫描线。

T4

做个双射,若 \(pre_i \in [l,r]\)\(pre_i \rightarrow i-pre_i\) ;若 \(pre_i \not \in [l,r]\)\(pre_i \rightarrow 0\)

那么就是真正意义上的 LCP 了。
用哈希和主席树维护一下,查询时二分,复杂度 \(O(n \log ^2 n)\)

20221022

bnds,质量挺行。

T1

不要推式子不要推式子不要推式子

\(d=\gcd\{a,b\}, \, a=a'd ,\, b=b'd\),那么有 \(a'b' \le \frac{L}{d}\)
枚举 \(a',b'\) ,二者要求同余,由上式可以得到 \(d\) 的上限,要求的和为 \(d|a'x-b'y|\)

复杂度 \(O(L \le L \log L)\)

T2

预处理根到每一个点的桶和对于任意 \(k\) 的答案。
树上路径拆作两边然后合并算贡献。

T3

注意到 \(n\) 个操作的分段函数实际上至多只有 \(n+1\) 段,因此可以线段树维护块内操作的分段函数。
查询时分成 \(\log\) 段一直做就好。

10.24杂题

MoQZ Two Arrays

二分答案,图上点变成 0/1 ,变成一个简单一些的博弈题,Alice 到 1 ,Bob 到 0 ,不能走到一个一样的格子。
必胜条件是一定在最大匹配中。
好题。

pzr CCO 2021

好题。

咕咕咕

20221110

T1

T2

观察覆盖过程,发现只有两种转移方式

20221114

T3 文件名又打错了。
T2 一个 int 数组开成了 bool 数组,pollard_rho 还不是很会。

T1

贪心,从底至上做,每次取最深的一个点移到当前位置,容易证明正确性。
用可并堆或者线段树合并维护。

T2

Pollard_rho 板子。
题解做法给的竟然不是 Pollard_rho 而是一个神必 MR 做法,想不明白用了 MR 不肯用 PR 是什么心理。

T3

\(2 \times 2\) 的特殊情况有结论:只要每行每列的异或和不变,就能用题中操作转化。

将操作每 4 个一起做,拼成新操作,这样就能分成 \(A \times B\) 个相当于上面 \(2 \times 2\) 特殊情况的子问题。
考虑这样做的局限性:一些单独的操作无法被表示。
手玩一下可以发现,中间的任意一个操作都可以用 新操作+第一行第一列的操作 表示。
那么只需要枚举第一行第一列的操作情况,剩下的用结论解决。

T4

每个区间保留左端点,
\(f_i\) 为以 \(i\) 为结尾的最小开头,初始化 \(f_i=i+K\)
答案为 \(\sum (i-f_i+K)/K\)
容易发现只需要维护 \(\sum f_i\)

往右加点是简单的,往左加点其实也只用处理 \(f_i\) 的出现次数。
可以回滚莫队解决。

20221116

没啥大锅,T2 写假了,T4 不是很够时间想部分分。

T2

把环之外的点先处理了,然后从环上任意一个没被覆盖的点开始枚举 \(k\) 个作为起点,暴力跑整个图。

T3

把已知信息转化成知道若干前缀和。
那么确定一个数 \(a_i\) 当且仅当 \(pre_{i-1}\)\(pre_{i}\) 都已知,用 exgcd 可以对两个数算出这样的答案。
变成多个数,加个容斥就行,枚举集合 \(S\)\(T\) ,容斥系数为 \((-1)^{|S|+|T|}\)
容易发现只有 \(\gcd(\operatorname{lcm}(S) , \operatorname{lcm}T)=1\) 时才会对答案有贡献,因此求答案的过程是枚举超集。
复杂度 \(O(3^m \log n)\)

T4

奇奇怪怪 DP 题。

一个数至多被移动一次,移动数的顺序显然是无关紧要的,那么考虑从大到小移数。
\(f_{i,j}\) 为已经处理 \(i+1 \sim n\) ,将 \(i\) 移到原序列 \(j\) 位置的最小代价。
如果移动 \(i\) ,贡献为 \(now(i) + now(j)\)
如果不移动 \(i\) ,则需要 \(i\)\(i+1\) 之间的数全部移开,因此对 \(pos_i+1 \sim j\) 都会多 \(\max \{ i-a_j,0 \}\) 的代价。

20221117

题意错的太离谱,考场策略已经不重要了。

T1

不同置换环先分开,结论是长度为 \(n\) 的环贡献为 \(2^{lowbit(n)}\) ,证明考虑构造。

T2

出题人想必被线代作业迫害了
套 BEST 定理,问题变成求基尔霍夫矩阵的 \(\det\) ,这样是 \(O(n^3)\) 的。
加速求 \(\det\) 过程,换阶公式:

\[|A||D-CA^{-1}B| = |D||A-BD^{-1}C| \]

证明考虑行列式 \(\det \begin{pmatrix} A & B \\ C & D \end{pmatrix}\) 的两种求值方式即可。

T3

原题,二分求第 \(k\) 大。
\(O(n \log ^2 n)\) 的做法是容易的,ODT 做到 \(O(n \log n)\)

T4

《WD 与地图》 第二次出现在联考。

20221119

《半真模拟》(大雾

T1

拓扑。

T2

填的过程肯定是贪心的,那么要求相当于在 \(v_i\) 的位置消耗 \(siz_i\) 个比它小的数,(\(siz_i\) 指其子树内的空点 减去 在更小子树内的空点)。
前缀和扫一遍就行。

T3

70pts 的部分分是判断是否存在完美匹配。
联想到网络流。
限制每条边的流量与人数取 min ,容易发现这是正确的。
二分人数,最大流判断是否可行即可。

T4

有显而易见的 \(O(3^n n^2)\) 做法。
然后观察性质。
显然最优方案的树是 DPS 树,不存在横插边。
那么枚举了点集和根之后,下面挂的子树一定各自是一个连通块,转移唯一。
做到了 \(O(2^n n^2)\)

posted @ 2022-10-06 08:18  Kelvin2005  阅读(43)  评论(0)    收藏  举报