2025全停课第2周做题记录+考试记录

周一 NOIP 模拟(6.30)

A

首先无代价差分,变成统计左上角到 \((x,y)\) 的答案。然后发现有一大部分都是从 1 开始一直连续的数列于是等差数列直接算,对于剩下的部分我同时减掉一些东西就变成又一些新的等差数列。对于减掉的部分继续差分,发现要求形如 \(\sum\limits_{i=1}^ni^2\) 的东西于是用公式秒了。

B

看到 \(n=36\) 于是想折半搜索。考虑合法的括号序列怎么枚举?就是满足前缀和不小于 0 然后左右括号数量相等,我们按照正常的思路直接搜一半,然后注意要找重心。考虑重心的横纵坐标独立,我们要讲所有点加起来求平均值,但是点有无数个,考虑加权(面积)后找等效点即可。然后你每次枚举下一个位置的时候就算一下等效重心,并且记录一下边界以便后面拼接。考虑处理出所有的序列,然后如果两个序列的边界的高度相同说明可以拼接于是直接拼起来判断重心是否合法即可。

C

小 trick 已被讲烂。考虑一个最优的选择方案,容易发现相邻的子串长度差小于等于 1,证明考虑反证法,如果更长就可以删掉一些东西使答案更不劣。于是我们就知道对于最长串有 \(len^2\le 2n\),于是我们暴力找出 \(\mathcal O(\sqrt 2n)\) 个串然后按字典序从小到大 dp 即可,记得每个串记录一下出现的位置。发现 dp 是一段区间转移于是树状数组维护。

D

考虑期望=总方案/成功概率,于是有答案为 \(\prod sz_i\)。于是现在考虑维护区间和全局求乘积,这个东西貌似是不可做的。但是观察模数,我们发现模数是 \(2^{16}\) 并且 \(k\) 均为偶数,所以我们考虑拆贡献的时候每次都是一个形如 \({m\choose i}k^i\times S\) 的式子,但是当 \(i\) 大于 15 的时候我们每个 \(k\) 贡献一个 2 就会让这个式子寄掉,所以我们只需要去考虑所有 \(i\in[1,15]\)。我们可以把要维护的东西看成 poly,每次修改都看成做个卷积。于是我们用 lct 单 \(\log\) 维护树,然后花费两只 \(\log\) 暴力卷积即可。

周二 NOIP 模拟(7.1)

A

唐题。容易发现本质不同的 deg 只有 \(\sqrt n\) 个,于是暴力做即可。

B

不小的分讨,个人认为比这道题还要难一点。首先 \(|T|<3\) 的就不多说了很简单,考虑 \(|T|\) 等于 3 的时候。考虑本质不同的串分别是什么:\(100,101,110,111\)。我们先考虑 \(100\)\(110\) 因为区间反转后他们其实也是相同的所以一起考虑。

考虑贪心从左往右,对于 \(100\) 我们肯定会选择一个形如 \(0\dots1\) 的区间,然后看每次操作能干掉几个 \(100\)。小分讨选择区间的右边第一个位置可发现每次只能干掉一个所以答案即为 \(100\) 出现的次数。

然后考虑 \(101\),我们像上面一样考虑,同理得到答案为 \(101\) 出现次数除以二上取整。

对于 \(111\),我们等价于是把一些长度大于二的连续段干掉然后把 1 填到形如 \(00,010\) 的子串中,对于 \(00\) 的我们可以填两个,对于 \(010\) 我们只能填一个,于是贪心即可。最后注意长度为奇数的连续段一直减二会变成 \(010\) 的情况,这时它也可以做贡献。

C

考虑每个点对哪些区间有贡献。若一个点为 \((x,y)\),则有贡献的区间 \([l,r]\) 满足 \(l\le x,y\le r\)。我们把 \(l\) 当作横轴,\(r\) 当作竖轴做平面直角坐标系,可以发现得到的矩形都是 2-side 的且在左上,然后我们扫描线做。考虑到还有区间的限制于是我们线段树初始化的时候就解决这些东西即可。注意离散化。

D

我们直接考虑 SG 函数。我们先拉一张表出来,如果没有额外限制,可发现只有 \(x=y\) 处的 SG 函数值为零。我们尝试加入一个特殊点,发现这个点的 SG 函数一定是零,但是跟它同行同列的点都变成 1,但是值为 0 的位置向上/右移动了一步。这是二维偏序,我们考虑按照 x 坐标排序,用 ds 维护 y。对于特殊点带来的平移影响我们每一维都用一个增量记录即可。注意排序的时候要把特殊点放在查询点前面。

周三刷题(7.2)

落忆枫音

看完感觉就很像 matrix-tree 定理,但是考虑这个图只有 1 的度数为 0,并且有向无环,我们就只用考虑一个点的父亲是谁,于是算方案就是 \(\prod in_i\)。但是现在要加一条边,我们需要干掉形成环的情况。考虑环的父亲确定,其他正常算。我们考虑 dp 做环的方案最后减掉。设 \(dp_u\) 表示 \(t\)\(u\) 的所有路径都为环上点集的方案数。初始 \(dp_t=\prod in_i\),因为图是 DAG 于是考虑拓扑排序转移。有 \(dp_v=\sum {dp_u\over in_v}\),因为从 \(t\)\(s\) 的所有路径加上 \((s,t)\) 一定都是环。然后就做完了。注意 corner case,如果加入边 \((x,1)\) 其实对答案是无影响的。

巨额奖金

我们正常是排序贪心做,对于边权相同的我们会有不同的选择情况。考虑不论如何选择边权相同的边,做完这轮后连通块一定是本质相同的,否则需要后面用边权更大的边联通所以一定不优。于是我们考虑每个连通块的连边情况,对于这些相同的部分做 matrix-tree 即可,最后乘法原理乘起来即可。

作业题

经典套路:公式是乘法但是要求加法于是把元素写成 poly 的形式(即 \(x+c\))然后手写卷积即可。

注意有一个 \(\gcd\) 于是考虑反演,写出式子发现还要求 \(\varphi\) 于是加上线性筛即可。

黑白棋

不错的博弈题。我们将其转化为 k-nim 游戏模型。考虑有 \(n\) 堆石子,每次可最多取 \(k\) 堆,每堆可取任意个。我们考虑先手的必胜条件是:将所有石子写成二进制的形式,对于每一位如果有 \(\sum_j bit_{i,j} \bmod(d+1)\neq0\)。这个不好做我们正难则反考虑必败也就是 \(\forall i\sum_{j}bit_{i,j}=q(d+1)\)。现在考虑按位 dp,设 \(f_{i,j}\) 表示考虑从高到低到了第 \(i\) 位,\(\sum a_i=j\) 的方案数。

转移的时候注意为了满足必败的条件所以只能在 \(d+1\) 的倍数处转移,于是有:\(f_{i,j}\leftarrow f_{i+1,j-2^i\times l}\times{k\choose l}\),最后答案即为:\(\sum f_{0,i}\times{n-i-k\choose k}\)

数据备份

反悔贪心板子,用优先队列加链表维护即可。

周四 VP arc183(7.3)

A

分奇偶考虑,如果是偶数说明第一个一定是 \({n\over2}\),然后倒序填数,否则就先填一段 \({n+1\over2}\) 然后当成偶数做即可。

B

分类讨论:你好。我:啊?

考虑什么时候 gg。第一种就是 B 有的 A 没有,其他的不太好想。然后考虑如果 \(k=1\) 我们容易判断,对于其他的 k 我们都可以把每 k 个位置拿出来调整顺序,但是注意必须在最后将用于调整的位置还原,于是就要看是否有一组 \((i,j)\) 满足 \(b_i=b_j,|i-j|\le k\)

C

看到这种限制果断区间 dp。对于一个区间考虑其最大值具有代表性于是转移考虑枚举最大值,然后因为有限制所以有的地方不能枚举,对于每个区间的不能枚举的地方我们可以 \(\mathcal O(n^2)\) 预处理。

D

沟槽的构造题。我们将子树大小为奇数的 sz 视为 1,否则视为 0。对于一个 x,如果其子树的 sz 均为 0 说明其与父亲配对,否则就与唯一的 sz 为 1 的子树的根配对。每次删点都是删除一个 sz=1 然后删除一个 sz=0 的形式,否则一定会 gg。

考虑 dis 最大于是我们将重心视为根节点,每次操作先贪心选择子树大的即可。

E

考虑每个位置可以挪动的区间,这些区间要么不交要么包含,证明考虑反证,因为如果两个区间有交说明都可以拓展到一个部分,然后这个东西具有传递性但是有一定的限制所以一定是包含的。但是不是说所有区间都能同时满足条件,如果有一段区间已经满限制了,就算有一个位置本来能跨过这个区间,但是现在就不行了,对于这种我们后面稍微特殊处理一下。现在根据区间限制关系不交或包含于是树形 dp,设 \(f_u\) 表示 u 代表的区间的答案。注意从子树合并上来的时候我们要考虑这些子树是否满限制,对于满限制的子树,它们会把原来一个区间划分成若干小段,于是我们用 set 之类的去维护每个段的信息,然后在 set 里面找 u 的位置再计算答案。

F

非常 nb 题。我们考虑一个数 \(i\) 的组成一定是 \(Ax+By\) 的形式,于是我们将两项独立,并把它们放到直角坐标系中,可以发现要求的东西被两条直线框了起来,我们去解直线,然后就去求两直线间的格点的曼哈顿距离之和。这个东西形如几个类欧的式子加起来,于是类欧去算一次函数即可。

周五好题分享(7.4)

因为题基本他们分享的题都没做,而我自己分享的题都是从我近期做过并且写过题解好题当中找的所以就没有写题解,考虑等后面写了题之后再补。

周六 NOIP 模拟(7.5)

A

发现越大的贡献到答案一定更优,于是排序做完了。

B

考虑要求最大的子树不同颜色数除以子树大小最小,考虑先去找每棵子树不同的颜色数,这个直接上 dsu 板子,子树大小直接 dfs 一遍即可。注意比较大小宁乘不除。

C

考虑一个二元组 \((x,y)\) 如何贡献答案。考虑找到其 topbit,因为两维独立,每次可以加任意的 topbit,所以能贡献的位置二进制下后缀与其相同。所以直接 trie 套 trie 就是两只 \(\log\) 了,考虑太难写了有没有更简洁的做法。我们思考扫描线,但是现在值域不连续不能做,我们考虑反转每个数,于是后缀相同前缀不同的限制变成前缀相同后缀不同了,所以后缀是一段区间就可以扫描线了。

D

考虑答案一定是一个相对中心的根,以及一些子树指向根,剩下的指向叶子。以上考虑用移动法证明。证明后考虑先找带权重心,然后注意到度数小于 37 于是折半搜索即可。

posted @ 2025-06-30 21:14  Lyrella  阅读(23)  评论(0)    收藏  举报