NOIP 口胡

因为没准备啥东西 这两天口胡一下近年 NOIP 的题
大概会一道不落?没什么很寄的考点主要是

2021

T1 报数

打一个 \(O(\log n)\) 查询 \(n\) 中是否有 \(7\),打一个类埃式筛筛掉所有倍数。然后可以 lower_bound 也可以直接记录下一个数是多少。
总时间复杂度小常数 \(O(n \log n)\)

T2 数列

发现数据范围小,考虑直接 dp。由于一堆 \(2^a\) 时需要进位,我们设计状态 \(f(i,j,k,p)\) 为 当前到了 \(S\) 中的第 \(i\) 位,到了 \(a\) 中的第 \(j\) 位,\(S\) 的二进制表示下有 \(k\)\(1\),同时该位需要向下一位进位 \(p\) 的情况下,所有乘积之和。
考虑枚举一个值 \(v\),一个出现次数 \(t\)。然后 \(f(i,j,k,p)\) 可以向 \(f(i+1,j+t,k+(t + p) \& 1, (t + p) / 2)\) 转移,系数是 \(v^t \times \binom{n-j}{t}\)
最后统计答案时 \(k + \text{popcount}(p)\) 小于给定的 \(k\) 时能计入。
总时间复杂度 \(O(n^4m)\) 的。最好写成刷表的形式。或者记搜?

T3 方差 术劣

简单化柿子得到需要最小化 \(n\sum_{i=1}^na_i^2 - \left(\sum_{i=1}^na_i\right)^2\)
你像这种有奇怪操作的题,他的套路就是通过一些变换(缀和/差分/邻位异或/特征异或)把操作转成正常操作。一般顺着试一遍大概就出来了。这题是差分。
发现操作就是交换差分的两项。
不是很会推式子,但总而言之最终需要让差分呈现单谷的情况。似乎打完爆搜能搜出来?
首先 sort 一下差分序列。从小到大考虑每个值该放在左边还是右边最优。
\(f(i,x)\) 为当前需要放第 \(i\) 个差分 \(d_i\)\(\sum_{i=1}^na_i = x\) 时的 \(\sum_{i=1}^na_i^2\) 最小值。考虑放在左右两侧的情况。放在左侧就是 \(f(i,x) + i\times d_i^2 + 2d_i\times x \to f(i+1,x+i\times d_i)\),右侧就是 \(f(i,x) +\left(\sum_{j=1}^id_i\right)^2\to f(i+1,x+ \sum_{j=1}^id_i)\)哦我还能记录一下差分的和是吧
最后取 \(\min_{i=0}^{sum}(n \times f(n, i) - i^2)\) 就是答案。
发现一个事,这样是 \(O(n^2\times \max a_i)\) 的,会炸。但是由于 \(a_i\) 升序,差分中不为 \(0\) 的项是 \(\min\{\max a_i, n\}\) 的。删除无用状态后做到 \(O(n\times\max a_i\times \min\{\max a_i, n\} )\)

T4 棋局

……
会 但是不想说也不想写
一类边暴力 二类边用并查集维护连续段和段端点 三类边用线段树合并 每个连通块维护连通块边上的棋子的黑白性和等级
跳了

2020

T1 排水系统

希望场上会写高精
不考虑高精的话直接拓扑排序维护 dp 即可。
我记得 noip 可以用 __int128 来着

T2 字符串匹配

反正我上来思考的方式是 \(O(26n + n\log n)\)
首先记录前缀和后缀的每个位置中出现奇数次的字符的数量以及这个的前缀和。然后可以直接枚举 \(|AB|\) 的长度,每次往前蹦一格,看 \(C\) 里出现奇数次的字符的数量,查询有几个 \(A\) 满足条件,加入即可。
总时间复杂度似乎是 \(O(26n + n\log n)\) 的。

T3 移球游戏

不会。
会个 \(n=2\) 暴力。首先有一种操作是把一个栈 \(X\) 里给定的颜色提到最顶上。我们需要一个空栈和一个满栈。设给定的颜色个数为 \(x\),我们先把满栈里的 \(x\) 个元素扔到空栈里面,再依次将 \(X\) 弹空。如果当前弹出的是给定颜色则扔进原来满的栈里,反之扔进原来空的栈里。最后先把原来空的栈里的元素弹进 \(X\) 里,再把原来满的栈里的元素弹进 \(X\) 里,满栈复位,完成。
这样也能把颜色提到最底下。总操作数是 \(2n + 2x\) 的。
然后对颜色分治。首先将 \(\le mid\) 的颜色置成 \(1\),其他颜色置成 \(0\)。把一个颜色提出来后分治即可。
总操作次数约为 60w 次。可以通过此题。

T4 微信步数

第一个观察是直接枚举点来移动的复杂度绝对炸掉。考虑每次操作后能接着移动的点都是一个 \(k\) 位超立方体,维护这玩意就行。
第二个观察是第一轮过后每一轮只要能结束那么对超立方体边界的减少量是相似的。可以列出式子求和。
我们设能走满 \(k\) 轮,求和得到的结果是 \(\sum_{i=1}^n \sum_{x=0}^k f(x)\)\(f(x)\) 是个 \(i + 1\) 次多项式,系数可以直接插出来。
拉插:\(f(x) = \sum_{i=1}^n f(x_i) \prod_{j\neq i}\frac{x - x_j}{x_i - x_j}\)
然后我们就只需要做一下 \(i\) 次方前缀和了。暴力即可。或者也可以伯努利数做,但这就不是 NOIp 而是 noip 了。

2019

?您在期待什么
2019 年没有 NOIp

2018

D1T1 铺设道路

好吧没想到最简单的做法
首先你这个肯定贪心地在填右边的时候填左边,因此假设 \(a_0 = 0\),我们有答案即为 \(\forall \ 1\le i\le n\ \land \ a_i > a_{i-1}, a_i - a_{i-1}\)

D1T2 货币系统

背包。
贪心地 sort 一下,从小到大跑值域上的背包。如果已经被拼出来了就扔掉,反之不扔。

D1T3 赛道修建

听说很厉害的贪心,为什么我看着像 sb 题?
首先二分。然后把孩子里的链拼合。由于一条边只能被经过一次,所以选孩子里没被选的最长链传给父亲接着决策就行了。
每次看当前决策的链里有没有大于 \(\text {mid}\) 的和拼起来大于 \(\text{mid}\) 的。第一类直接删,第二类对最小值二分即可。

D2T1 旅行

不会 log 解法。
树上简单。把你的 vector sort 一遍就完了。
基环树上简单。枚举不走哪条边再 sort 你的 vector 就完了。

D2T2 填数游戏

是个打表找规律题。
首先打表可以发现 \(f(n,m) = f(m,n)\)。这点的构造是翻转每一位,矩形旋转 90°,左右翻转。
然后打表可以发现 \(f(1,m) = 2^m\)。这点……显然。
最后打表可以发现当 \(m > n + 1\)\(f(n,m) = 3\times f(n,m-1)\)。证明不会(
之后去学学(

D2T3 保卫王国

听说是个 ddp?

posted @ 2022-11-23 20:58  joke3579  阅读(89)  评论(4编辑  收藏  举报