2025.10 模拟赛日志
2025.10 模拟赛日志
- 2025.10 模拟赛日志
- 25十一集训讲课 1:数据结构(20251001)
- 25十一集训讲课 2:数论(20251002)
- 25十一集训day1(20251003)
- 25十一集训讲课 3:DP(20251004)
- 25十一集训讲课 4:图论(20251005)
- 2025/10/07NOIP模拟赛(20251007)
- 2025/10/08NOIP 模拟赛(20251008)
- 20251010 杂题选讲(20251010)
- 2025/10/11NOIP模拟赛(20251011)
- The 4th Universal Cup. Stage 2: Grand Prix of Paris(20251011)
- 25noip十连测day5(20251012)
- 25noip二十连测day1(20251013)
- 25noip二十连测day2(20251014)
- 25noip二十连测day3(20251015)
- 25noip二十连测day4(20251016)
- 2025/10/18NOIP模拟赛(20251018)
- 25noip二十连测day5(20251020)
- 25noip二十连测day6(20251021)
- 25noip二十连测day7(20251022)
- 25noip二十连测day8(20251023)
- The 4th Universal Cup. Stage 3: Polar Grand Prix
- 2025/10/25NOIP模拟赛(20251025)
- 25noip二十连测day9(20251027)
- 25noip二十连测day10(20251028)
- 25noip二十连测day11(20251029)
- 25noip二十连测day12(20251030)
25十一集训讲课 1:数据结构(20251001)
数据结构-黄洛天(线段树、分治、树分治、分块)
25十一集训讲课 2:数论(20251002)
数论-黄建恒(组合数学、期望与概率、生成函数、dp 杂题)
25十一集训day1(20251003)
- [A 签到题] 签到题
- [B 图论题] 二分答案,树,贪心
- [C 计数题] 线性 dp 优化(纯粹的技巧)
- *[D 博弈题] 贪心,邻项交换法(真的叫这个名字吗?),数据结构维护。
第四题是 QOJ5092 森林游戏 的加强版。
\(100+100+100+25(15)=325(315)\)。竟然上分了。第一题很简单。第二题很简单,这个贪心我见过了。第三题卡了一会,想优化的过程可能有一点慢,不清楚。第四题因为先后手的顺序,没想到怎么处理缩成两个点的块,后面就全炸了。
25十一集训讲课 3:DP(20251004)
DP-黄建恒
25十一集训讲课 4:图论(20251005)
图论-赵晟昊
2025/10/07NOIP模拟赛(20251007)
- *[A 大数定理]
- *[B 中心极限定理]
- *[C 散步]
- *[D 买宝石]
\(0+0+60(100)+0=60(100)\)。
2025/10/08NOIP 模拟赛(20251008)
- [A 考试] 枚举绝对值符号
- [B 围棋] 连通性
- [C 互相抵消] 拆式子,线段树维护
- [D 串串] 容斥,第二类斯特林数
\(100+100+100+10=310\)。前两题挺好写。第三题,也还好算,搞了个 \(3\times 3\) 矩阵上线段树维护,一测发现被卡常。这个时候正确的做法应该是把其它几个 \(n\) 顶到上界的部分分强行写掉。但是我没有这么干,直接不管了。最后线下评测也是成功挂了 5 分。赛后发现矩阵搞大了,有些东西会被抵消,从而只需要维护 \(2\times 2\) 矩阵(符合题目名称)。第四题很明显的二项式反演容斥,然后轻轻推了一下。然后忘了容斥完之后可以无视限制了。没想出来。赛后继续做,卡在 \(O(n^3)\) 做法动不了。看了题解,先容斥 01 再容斥 1 可以做,先容斥 0 再容斥 1 就不知道怎么做(需要第二类斯特林数的生成函数?),很神奇啊。
20251010 杂题选讲(20251010)
剩余:H
自己做出来的:ABCDEFGIJ(我也太牛了)
2025/10/11NOIP模拟赛(20251011)
我就是出题人。前三题太简单了,第四题太难了,搞出了二十几个“过了前三题后什么也不会”的人。要加大难度了。
The 4th Universal Cup. Stage 2: Grand Prix of Paris(20251011)
发挥不完全。大概就是把签到题过完了,难一点的题目全部没做。有几道题一直卡着,罚时拉满了(都不是我写的)。感觉还没开始就结束了。
另外:有人说可以看一下上一场 ucup 的题目:
- https://contest.ucup.ac/contest/2539/problem/14426
- https://contest.ucup.ac/contest/2539/problem/14432
25noip十连测day5(20251012)
- [A MoCo] 签到题
- [B DINO] 树、MEX、暴力状压
- [C SimCLR] 树形 DP、树形背包、换根退背包
- *[D JEPA] 提交答案,Lambda 演算
\(100+100+30+0=230\)。第一题搞笑的。第二题想了一下终于发现 MEX 不超过 \(O(\log n)\),那应该是怎么做都对。第三题没有想到可以换根把父亲的影响忽略,搞笑了。第四题不可做。
也没有很认真地打,但还是写一下复盘。第一题纯搞笑,为后面的非人类题做铺垫。
第二题,比赛开始的时候题面还写错了,等了一段时间。一开始因为刚刚做了 AGC043C Giant Graph 所以错误地认为 MEX 不超过 \(O(\sqrt n)\),想着那这不是做完了就准备整理思路开始写。然后发现合并不了,只会状压合并,感觉倒闭了。读了一下后面的题决定继续做这个题。摆了很久之后终于发现一个问题,就是这个 MEX 没有那么大;隔壁 AGC043C 的根号是因为它是 DAG,可这题是树啊,而且是所有儿子的 MEX。算了一下发现 MEX 不能超过 \(O(\log n)\),那就是直接状压就结束了。复杂度不会算,不算了。感觉需要把运算次数卡一下,卡完应该就是对的了。做了一堆优化,感觉应该差不多了,应该能过了。
第三题,这是什么东西?两个简单的特殊性质和小暴力写完,不知道下一步怎么做了。这里的问题是,一个点会被父亲影响,使它被染色,所以树形 DP 有可能要记录父亲的状态。
看了题解,发现这里我忘了两个事情,就是 1. 每个点的贡献是独立的;2. 如果这个点需要父亲的支持,那么它只会继续往下传,不会对父亲那边产生影响。这样还是太难绷,我们只要指定每个点分别为根就没有父亲的影响了,这个事情根本没有发现,整个题倒闭了。
后面就是树形背包换根,发现需要做树形背包的点只有 \(O(n/k)\) 个所以复杂度 \(O(n+(n/k)k)=O(n)\)。树形背包撤销需要的逆元依赖于每个点只考虑子树的 DP 值,应该是可以一开始就一起求出来。另外这题可以把方案数换成概率,写起来爽一点。
第四题是非人类题。我觉得还是不要做了。
25noip二十连测day1(20251013)
- [A 宝宝会算术] 向上取整、向下取整的性质
- [B 宝宝玩游戏] 大构造
- [C 宝宝拼字母] 字符串,Trie,枚举,数据结构
- [D 宝宝选东西 / LOJ3039] 决策单调性,删除链表维护前 \(k\) 大值。
\(100+10+0+50=160\)。这场最难受的就是一直在做 T2,没换题。赛后调出来,其实也差不多了。
第三题,有一个难绷的东西忘了。在 Trie 树上,每个点子树中所有叶子个数就是字符串总长度。笑死我了。我还以为这个东西需要额外一维偏序,看到 \(10^6\) 就直接炸了。另外更难绷的是,直接写 \(O(n^2)\) 的算法,可以获得 \(60\) 到 \(80\) 分不等,主要是因为数据太难造,不会浪费在那种 \(10^6\) 个 A 的数据,所以 \(n\) 会十分小,可以草过去特殊性质甚至 \(10^5\)。莫名其妙。
第四题,根本想不到决策单调性啊。这里有一个想法是,这题的贡献函数是一个满足四边形不等式的函数(注意:不是凸的。)加上分别关于左右端点的任意函数。四边形不等式不关注分别关于左右端点的任意函数是什么,因为它们会被抵消。所以剩下的就满足四边形不等式,所以有决策单调性。后面就是分治决策单调性,莫队思想维护一个一直删除的带撤销链表求出区间前 \(k\) 大值的和。
25noip二十连测day2(20251014)
- [A 小学算术] 简单数学
- [B 马戏表演] 数学
- [C 拯救世界] Slope Trick
- [D 环上游戏] 维护最大权匹配
\(100+24(100)+36+52=212(288)\)。第二题写挂是最大的失误。第三题有一个很容易的优化没写,写了这个优化多 \(16\) 分。我确实应该回顾一下以前做过的题目了。
第一题,很签到,15 分钟(8:45:29,含读题)。第二题,写对式子之后,想了一下,把组合数拆掉之后,就发现了较小的那一边一定是 \(1\),所以可以前后缀和转移。感觉很简单,确实是一个 T2 的难度!总花费 55 分钟(9:37:58)。然后为什么这个第二题挂掉了呢?因为求 \(j(i-j+1)\) 的最大值的时候 \(j\) 不小心取了 \(\left\lfloor i/2\right\rfloor\),而应该是 \(\left\lceil i/2\right\rceil\)。这很搞笑,一个长度为 \(n\) 的序列的中点应该是 \(n/2\) 向上取整。后来想了一下,这题如果对拍的话就可能可以发现了。实际上也确实,本来就应该有这个动作,因为前一个结论我是猜的,应该要暴力验证。
第四题,先做了第四题,因为我做过这个模型。结果花费了很长时间才回想起来一个关键的中间结论(前 \(2i\) 个数字最多选 \(i\) 个 \(\iff\) 后 \(n-2i\) 个数字最少选 \(\left\lceil n/2\right\rceil - i\) 个)。后面继续做的时候想假了,最后还是没做出来。\(a_i\leq 2\) 的部分分没时间写。
第三题,卡第四题的时候顺手写了。我都不知道为什么这题可以从 \(O(nk^2)\) 直接飞到 \(\tilde O(n+k)\)。可能是预设难度了,直接跳过了,根本就忘了“绝对值函数是凸函数”还有紧随起来的 Slope Trick 的事。
总的来说,打的还是不太满意。
25noip二十连测day3(20251015)
- [A 哈基米哟南北绿豆] 二进制、函数、数学、构造
- [B 阿西噶啊纳哈呀鲁 / QOJ10908] 简单的背包
- [C 欧马吉利叮咚鸡 / QOJ37] 数学,矩阵快速幂
- *[D 叮咚叮咚哈基米 / QOJ887] 二次函数最优化
第一题原题来自:ISIJ Cup 2021
\(100+100+100+30=330\)。爽!
第一题卡了一个小时。但我觉得如果就这样跳了这个题,下次再来可能就做不出来了(感觉就是这样,被跳的题目难度自动加一档)。尝试构造了一下 \([x=0]\) 函数,果然构造不出来,发现问题是没有右移,进一步发现所有操作都是低位影响高位,没有高位影响低位的。所以就可以猜到结论了。
第二题,这个题怎么放到第二题的?这应该和第一题换一下。随便写就行了。
第三题,我看了一下,可能第三题好做一点,先做第三题。感受到应该是可以写成递推的形式,大概率是线性递推,只要把要用的东西列出来就行了。推了一下,感觉十分痛苦。有一个事情可以方便式子的化简,就是将 \(\sum_x f(x)\) 改成 \(E[f(x)]\),求和改成期望,这样就会少一个变量,防止平方项出现。只需要想清楚就差不多了。然后还有一个事情是 \(E[x]=\sum_{i=1}^np_ix_i\) 与 \(E[y]=\sum_{j=1}^mq_jy_j\) 合并成 \(\sum_{i=1}^n\sum_{j=1}^mp_iq_j(x_i+y_j)\) 的时候,应该是 \(E[x]\sum_{j=1}^mq_j+E[y]\sum_{i=1}^np_i\),不需要把 \(E[x]E[y]\) 乘起来。大概就是这样,写完一遍过了。
第四题,\(a_i\leq 0\) 的情况很像一个 Slope Trick 的形式,因为时间好像不太够(?)所以写了 30 分没写到 60 分。后面完全没有思路。这个题其实可以是一种二次函数最优化的模型,可以根据导函数进行调整,使得所有没有被卡住的二次函数的导函数都相等。后面暂时想不清楚。
已严肃学习:哈基米山歌这一块_哔哩哔哩_bilibili。
第四题后面的部分,可能看懂了。我们已经知道
- 我们枚举了一个 \(a_i>0\) 的函数,剩下的 \(a_i>0\) 的函数都 \(x_i\in \{0, t_i\}\),使用 \(2^{K-1}\) 枚举剩下的。
- \(x_i\not \in\{0,t_i\}\) 的函数,它们的 \(f_i'(x_i)\) 都是一样的(设为 \(D\))。
- \(x_i=0\) 的函数,它们的 \(f_i'(x_i)\leq D\)。
- \(x_i=t_i\) 的函数,它们的 \(f_i'(x_i)\geq D\)。
对于一个固定的 \(D\),每个函数取什么值是固定的,可以计算 \(\sum x_i\),则 \(h(D)=\sum x_i\) 这个函数是下凸的(开口向上?UT 说的是“倒确实不见得是完全单调的,但一定只有一个拐点,两侧都是单调的;或者说,斜率是单调的”)。现在考虑为什么取值是固定的。我们先计算出 \(x_{0i}\) 使得 \(f_i'(x_{0i})=D\),然后 \(x_i=\max(0, \min(t_i, x_{0i}))\)。这里其实有一个问题,对于唯一的 \(a_i>0\) 的函数,它其实是反的,\(x_{0i}\in[0,t_i]\) 时,说明 \(f_i'(0)\geq D, f_i(t_i)\leq D\)(你看那个导数的形式 \(2a_ix+b_i\) 就知道,它会反掉),是这个部分导致 \(h(D)\) 最后的样子变成下凸的。又因此你可能还要注意让 \(h(D)\) 在一个范围内被框住,防止 \(a_i>0\) 的函数算出来的 \(x_{0i}\) 飞出去(感觉应该是这样的,保留不是的可能)。还有比较逆天的 \(a_i=0\) 的函数,那就看一下 \(b_i\) 和 \(D\) 的关系,其实是一样的(但最后算答案就会比较自闭)。
好难写。不会写。
25noip二十连测day4(20251016)
- [A 开心消消乐] 括号匹配,相邻交换操作,树状数组二维偏序
- [B 越狱 / P6715] DP
- [C 冒泡排序] 排序网络,计数 DP
- [D 黑白棋 / ARC109F] DP
第三题原题来自:sort - 题目详情 - 云斗学院
\(100+0+30+16(20)=146(150)\)。倒闭了,秒掉第一题之后什么也不会。
第一题真的是一眼秒掉的。
第二题想了很久,首先是刻画了一下 \(n=2\) 的流动情况,想了一下犯人的策略,感觉犯人什么也干的出来,很难刻画。
先做一下第三题。这题肯定是先考虑 0/1 序列怎么做,再考虑排列怎么做。0/1 序列的情况很快就搞定了,有很多种等价的形式,但是没有找到那种能记在 DP 状态里然后从小往大填数的,很奇怪,就算是 \(k=1\) 也有过多状态。好奇怪。用排列直接正攻的话,好像更不能做了。
第四题写了状压暴力之后就没有想了。
第二题感觉可以改成一个水流的模型,控制水流之间的分界线。但还是诡异,好像没有发现什么新的性质。写了一下最终以过不去样例一结束。然后比赛就差不多结束了。
赛后看题解。第二题是一个 DP。核心的思路是从整体考虑,假设已经确定了所有监狱最后放了多少个人,再设计状态 \(dp_{i,j}\) 表示使得第 \(i\) 个监狱至多有 \(j\) 个人(人可以从左边或者右边过来)的方案数,转移的时候根据上一间监狱的限制决定下一间监狱最多能放多少。大神说可以先从 \(n=2\) 的情况开始想,然后就很自然地推到 \(n>2\) 的情况。
第三题就是把 0/1 序列结论写好看一点之后进行插入 DP,有点生气。结论是 \(pos_{1,k+1}\) 之后至多有 \(k\) 个零,等价于 \(pos_{1,k+1}>pos_{0,x-k}\)(此时序列中有 \(x\) 个零、\(n-x\) 个壹),又等价于前 \(x\) 个数中至多有 \(k\) 个壹。嗯,确实是这样的。这个结论就很方便 DP 了。啊,这个的推导过程不知道怎么推过去啊。问题在于,无论是哪个结论,分界点都是单调的(没有想到这个),从而可以插入 DP。
第四题也是一个 DP。这个其实不太像 DP,更像是先分析操作的结构再递推求解。时光倒流改成删除之后,先考虑第一个被完全删除的段,这时可以得知其它段的形状限制,然后发现以后删除也肯定是这个颜色的删除(不劣),最后一段除外。这样就把所有连续段的限制要求写出来。配合子序列自动机 DP 就行了。
2025/10/18NOIP模拟赛(20251018)
- [A 位操作 / CF1923F] 贪心、二分、哈希
- [B 地狱速通 / CF1859F] 傻逼树上数据结构
- [C 多元宇宙 / CF1556G] 二进制,拆出线段树区间从而建图,并查集维护连通性
- [D 奇偶排序 / CF1558F] 排序网络,转化为 0/1 序列后用线段树维护 DP
\(100+100+60(50)+50=310(300)\)。第三题数据肯定是造错了,莫名其妙的多了十分。
第一题就挺不符合第一题的难度,推导出至多使用两次二操作之后,用二分+哈希完成字符串的比较。复杂度 \(O(n\log n)\),\(n\leq 5\times 10^5\)。这还是第一题吗?
第二题更加难绷了,首先这个 \(\left\lfloor x/2\right\rfloor\) 是唐的(其实还是用到一些单调性),这个就是纯粹给复杂度带上一个 \(O(\log V)\),然后变成求 \(\min_x dis_1(u,x)+dis_2(v,x)\),到这里可以用换根 DP 把全局信息压缩到路径上,查询路径信息。这样一看的话复杂度是 \(O(n\log n\log V)\),一看 \(n\) 是 \(10^5\),想了一下能不能 \(O(n(\log n+\log V))\),想了一会感觉不行。
这个时候反应过来了,出题人就是逆天,这两个题就应该是这样做的,对于前两题来说非常难写,但还是要写一下。然后决定先写第一题,再写第二题。运气比较好,写完之后不用怎么大调就过了。然后给第二题加了个对拍。这出题人真逆天啊。(原来是组题人,气死了!)
竟然没时间了!第四题写了个小暴力,第三题写了个大暴力,都很唐。期间因为没注意到第三题中每个点只删一次而卡了一会。最后第四题想了一个特殊性质,这个特殊性质肯定是转 0/1 序列,没有什么悬念,然后手动模拟一下发现性质还挺好的,不用特别算什么东西,随便写一下就行了。
题解:第三题就是拆成线段树区间之后,在线段树上提前把图建出来,之后用并查集维护就很方便了。第四题拆成 0/1 序列后可以接着往下做,最后是需要线段树。
组题人根本不是人类。组题人做过自己组的题目吗?
25noip二十连测day5(20251020)
- [A 魔法试剂] 质因数分解
- [B 称重] 带权并查集
- [C 编码 / QOJ10313] 哈夫曼编码的一种扩展,DP
- [D 翻转函数] Manacher 思想
\(100+100+100+60(35)=360(335)\)。在第四题中,我因为使用 (int)set<int>(a + 1, a + n + 1).size() == n(\(n\leq 2\times 10^6\))判断数组中的数字是否互不相同导致 TLE on test 1。
第一题卡了一个小时,一直说要 DP 或者直接搜索之类的,后来才发现答案的种类数不多,发现之后就会完了。
第二题读懂题之后想到带权并查集就做完了,可能写的时候会被卡一下。
第三题就是要考虑先确定树形态,再按照树节点的深度顺序逐个确定结点的位置。可以用一个 DP 对树节点的深度进行刻画,然后再逐个结点填进去。要滚动数组的话需要一点点手法。
第四题写完 \(O(n^2)\) 之后想了很久之后才想到这是要套用 Manacher 算法进行改造的题目,但是时间不够了。后面看题解看了一下就是 Manacher,但是没想到的东西还挺多的。在 Manacher 算法中,\(x\) 从 \(f_{2mid-x}\) 继承过来的时候,当 \(x+f_{2mid-x}>r\) 时,原来的算法是直接将前者对后者取最小值。如果现在说,我们需要把继承后的区间暴力收缩到 \(\leq r\),那么复杂度可能会出现一些问题。如果规定多个相同右端点时选取中心靠右的,那么可以证明复杂度是正确的,因为既然 \(2mid-x+f_{2mid-x}\leq r\),所以 \(x+f_{2mid-x}-r\leq 2x-2mid\),前者是收缩的次数,后者由于发现这种事情的时候 \(mid\) 会被更新为 \(x\),全局均摊下来就是 \(O(n)\) 的,所以总复杂度不变。精细实现即可整道题线性。
25noip二十连测day6(20251021)
- [A 列队] 签到题
- [B 子序列] DP 优化
- [C 骑士] 设计 DP 状态
- [D 文本编辑 / P6700] 基环树森林,贪心,状压 DP
\(100+100+100+40=340\)。
第一题签到。
第二题推到 \(O(n)\) 的状态数之后,就直接线段树优化了,有一点难写吧。
先做了第四题,搞了几个很显然的结论之后感觉这道题挺简单的,写了一下过不去样例才发现假了,复杂程度超乎想象,先跳过了。
第三题一上来就把点分成 \(\geq d/2\) 和 \(<d/2\) 的,然后想了几种方法,最后确定下来以 \(0,d,1,d-1,\cdots\) 的顺序 DP,随便扫一下就行了。
第四题枚举最后每种字符怎么变,一个 \(6^{6+2}\) 左右的暴力。写完之后发现不知道后面的部分分怎么做了。通过打表发现了
- 好像绝大多数存在出现两次的数字的序列都是可以被生成的,是排列的序列只有不操作的那一种是可以被生成的;
- 一个环可能会有额外的一次贡献(操作二),尤其是纯环,但是好像不太知道纯环是怎么构造方案的;(纯环指连通块的点都在环上的连通块)
- 好像贡献至少是纯环个数加上非自环的边数,不会构造方案,对于是否有别的部分因为神秘原因没写验证程序;
- 图是 DAG。(???)(以为是对的,结果是最逆天的结论,直接导致后面的部分卡住)
这里又要记住了,《星战》那一年已经错过了,今天又错一次:所有点出度都为 1 的有向图是基环树森林。
- 一个序列 \(to_i\) 可以被生成当且仅当 \(to_i=i\) 或者 \(to\) 中有不超过 \(n-1\) 个不同的数字;
- 贡献是纯环个数加上非自环的边数,方案可以构造,略;
- 图是基环树森林,因此可以写一个 \(O(3^n)\) 的算法通过 \(n=18\) 的部分分。
接下来似乎有一点难受。我们提出一个想法,考虑贪心,先给每个点都直接选代价最小的边,我们发现如果得到一个没有纯环的图就做完了,因为此时所有点都最小化且没有产生额外的代价,那么一定得到的最小的答案。
如果得到的图有纯环似乎又陷入僵局。我们发现最优的图上的纯环,一定在贪心得到的图上存在(但不一定为纯环)。如果不存在,找到不优的边把他改成贪心的边,那么一定会减少一个纯环,且边还变得更优。所以我们在新图上可以认为,除了原图上已经存在的环,额外的纯环不用支付 \(c\) 的代价:因为即使不需要 \(c\) 的代价,纯环仍然不优。由于原图最多 \(13\) 个环,因此我们可以状压 DP 记录每个环(注意,无论是纯环还是杂环都要记录)是否已经不为纯环,最后给仍为纯环的加 \(c\) 代价。这样就做完了。\(O(n^22^{n/2})\)。
感觉这后面的部分挺难的,但是沈队说可以想,我也想不出来这个要怎么想。
25noip二十连测day7(20251022)
- [A 划分字符串] 诈骗搞笑题
- [B 记忆碎片] 贪心,阶梯状柱状图
- [C 三分图计数] LDS,插入 DP,排列字典序,计数
- *[D 登山计划] 求最值,分治,贪心,线段树分治
\(100+100+80+50=330\)。
第一题的结论好难绷啊。
第二题很自然地想到把所有数字排列成杨表的形状,然后枚举并贪心。
第三题首先要发现 \(LDS\leq 3\) 的排列是合法的,然后模拟 LDS 求解的过程(无论是转为 LIS 的划分还是树状数组优化的转化),可以写出一个 \(O(n^4)\) 的 DP,可以前缀和优化到 \(O(n^3)\)。但是由于有这个排列的字典序限制(求出字典序小于等于某个输入排列的合法排列数量),所以可能会有一点难绷。
有两种顺序,第一种也是我直接想到的一种,就是从后往前,维护树状数组优化做法需要的变量,通过康托展开得到的变进制数进行比较,记录已经确定的后缀与给定排列的大小关系(关系可以一直变),然后做插入 DP。当时写了 \(O(n^4)\) 就跑了,忘了还有个前缀和优化能写了,但好像因为常数因子特别小,所以碾过去了 \(n=300\)。问题在于这题是多测 \(T,n\leq 300\) 而不是 \(\sum n\leq 300\),这个做法是由于严重依赖输入排列的信息,所以只能做到 \(O(Tn^3)\) 的,过不了一点,最后获得 \(80\) 分。
第二种是题解做法,就是从前往后,转为 LIS 的划分并维护序列中的三个数(\(O(n^3)\) 空间,这下知道为什么 \(n=300\) 了),因为是从前往后的,很自然就知道要枚举相同的一段前缀和后面第一个填的数,然后进行 DP 转移,记录序列中的数字之间还有多少个数字可以填。这样做就摆脱了输入排列地限制,舒服得多,很容易就能把复杂度从 \(O(Tn^3)\) 变成 \(O(n^3+Tn^2)\) 的。这样就肯定能过了。同理,不做前缀和优化得到的 \(O(n^4)\) 算法也能随便过。
第四题更是逆天。前两个子任务(\(20\) 分)甚至第三个(\(5\) 分)都是送的,一开始还写错了数据点分治,后面无意识地把数据点分治改成判断子任务编号,蹭过去了。然后是子任务 4、5(\(25\) 分),初见端倪,虽然和正解完全没有关系,但还是有必要记一下。问题如下:
给定一个长度为 \(n\) 的序列 \(\{a_i\}\),\(m\) 次询问 \(l,r,k\),回答 \(\max_{i=l}^{r-k+1}\min_{j=i}^{i+k-1}a_j\)。要求 \(O((n+q)\log n)\)。
对 \(a_i\) 建立笛卡尔树,求出 \([s_i, t_i]\) 使得 \(l\in [s_i, i], r\in [i,t_i]\) 都有 \([l,r]\) 的最小值为 \(a_i\)。注意这些区间不要重复,手动为相同的 \(a_i\) 添加第二关键字(例如 \(i\))。把像 \(l\in [s_i, i], r\in [i,t_i]\) 这样的范围画到平面直角坐标系上,区间 \([l,r]\) 对应点的坐标为 \((l,r)\),这样画出来是 \(n\) 个矩形,把上三角的部分覆盖了,而且每个点被覆盖恰好一次。
考虑询问,为了方便我们让 \(k\) 减去一,询问就是问 \([l,l+k],[l+1,l+k+1],\cdots,[r-k,r]\) 这些区间的最小值的最大值,也就是平面上一条平行于 \(y=x\) 的斜线段。有一个性质,这条斜线段经过的矩形,要么矩形完全包含斜线段(此时这个矩形是唯一的,值为 \([l,l+k]\) 的最小值),要么和矩形的边界有交。把矩形拆成四个边界就好办了,以下边界(\((s_i,i)\) 到 \((i,i)\) 的边)为例,设交点为 \((p,p+k)\),则斜线段与这条边界有交当且仅当:\(p+k=i\land p\in [s_i,i]\cap [l,r-k]\),可以把它们写开:\(i-k\in [s_i,i]\cap [l,r-k]\),拆成 \(k\in [0, s_i-i]\land i\in [l+k,r]\),这就很爽了,我们把它拆成了二维偏序,可以 \(O((n+q)\log n)\) 地做。另外三条边界是同理的,都可以这么拆。
做到这里之后就摆烂了。然后看那个正解,完全没有关系。正解是考虑分治,统计跨过分治中点 \([mid, mid + 1]\) 的贡献时,枚举 \(k\),然后考虑答案的计算 \(\left|\min(la_l,lb_l)-\min(ra_r,rb_r)\right|\),根据大小关系分类,使用二分找到分界点,用数据结构查询。很难写。
25noip二十连测day8(20251023)
- [A 鱼人(game)] 简单(?)博弈
- [B 前期攻势凶猛(linear)] 辗转相除
- [C 机械(Tree)] 神秘的匹配计数问题,简单结论
- [D 则以后期见长(mex)] 维护未出现的数的位置从而求出 MEX
\(100+100+20+10(30)=230(250)\)。
第一题卡了一个多小时才把结论完整地证明出来。
第二题很快想到了怎么做,但是被卡空间了,很自闭。这里是,原数组会产生 \(O(n\log V)\) 个信息,询问需要提取其中的 \(O(q)\) 种进行二分,然而 \(n,q\) 是同阶的,所以如果没有思考直接就写了,可能会 MLE,即使没有 MLE,也有 TLE 的风险。比较好的写法是先把询问离线下来,知道询问需要哪些信息,然后再从原数组中生产 \(O(n\log V)\) 个信息,如果这个信息是询问所不需要的,那我们也不需要将其记录,这样就节省了空间。还有一种逆天方法,把原数组分成 \(O(\log V)\) 块,每块 \(O(n/\log V)\) 个,每一块都把它和询问一起跑,这样跑 \(O(\log V)\) 轮,每轮 \(O((n/\log V\times \log V+q)\log n)\),还是 \(O(n\log V\log n)\),不改变复杂度。
第三题,想不到啊!转化为这样一个问题,左右各有 \(n\) 个点的二分图,有 \(2n\) 条边连接它们。现在为每个点匹配一条边,求匹配方案数。等价的形式:为每条边定向,使得每个点只有一条出边。发现二分图是掩人耳目的东西,把二分图的条件丢掉,立刻就能发现当每个连通块是基环树时,存在完美匹配,方案数为 \(2\) 的基环树个数次方。感觉很生气,建模的时候用到二分图,最后却和二分图没有关系(当然有一个部分分是用 Dinic 跑二分图匹配判断是否有解,但我好像没有意识到这是一个匹配问题)。
第四题没敢做,感觉很恐怖。大概是这样的,如果本题离线的话,做法是时光倒流将加入改成删除,从集合里删除一个数后,它的 MEX 会和这个数取最小值。这提醒我们,未加入的数字是很重要的。假如对每个数字,它在哪些集合中没有出现是确定的,那么我们可以用一棵线段树,对这些集合的位置进行 chkmin 就行了。所以我们使用颜色段均摊,维护每个值对应的没有出现的位置。注意,我们需要撤销之前的区间 chkmin 操作,这意味着我们需要对每个线段树结点维护它对它子树里的点的 chkmin 标记,需要对每个点维护可删堆,同时线段树的信息维护方法也会有一些改变,类似于标记永久化线段树。
The 4th Universal Cup. Stage 3: Polar Grand Prix
我做的题:D 和 G
我提供思路但不是我写的题:C 和 J
我真牛。
需要补题:
- [B Christmas Tree / P9111] 树形 DP
- [E Maximum Segment Sum] 格路计数,反射容斥
- *[F This Time I Will Be Lucky] 浮点数 DP 优化(?)
E 题单独说一下这个反射容斥是什么,因为题解里面没有写。
考虑双射。当你第一次向正右的时候,改为向右下(到y=-1)。初始 y=0。然后如果不是沿着正右走,就按照正常方式上下相反的方式走,右上->右下,右下->右上。然后如果又有一次向正右走,此时一定y=-1,再走到y=0即可。
2025/10/25NOIP模拟赛(20251025)
- [A 剖分] 树形 DP
- [B 海啸 / ARC201B] 二进制、贪心
- [C 不稳定金属锭] FWT、线段树二分
- [D 最小生成树] 线段树合并
我是出题人。这场比赛出的还算满意吧。
25noip二十连测day9(20251027)
- [A 染色游戏] 贪心、模拟
- [B 动态图] 并查集
- [C 憧憬] 分治,偏序相关问题
- [D 猜数字游戏] 蓝眼睛红眼睛问题,偏序降维
\(100+100+100+10=310\)。这场模拟赛怎么比浙江旅行团模拟赛还简单,这是什么情况,有 50 个人 300 分。
第一题随便搞一下贪心,差不多那样就行了。这样例什么情况,一遍过了。
第二题想了好久能不能线性。但发现有一个哈希表瓶颈之后释怀的笑了,随便写了一个,复杂度除了哈希表应该是 \(O(n\alpha(n))\) 的,但是哈希表写了 std::set,为后面被评测机波动卡常埋下伏笔。大样例又是一遍过。
第三题的结论挺好的,没有写分治,直接单调栈+扫描线就过了,感觉没有什么难点。大样例又是一遍过。我有点怀疑我要不要对拍了。
第四题前面的转化没有发现本质,没做出来。大概如此,有 \(n\) 个人,第 \(i\) 个人帽子上有一个整数 \(a_i\),他能看到别人的帽子上的数字,却看不到自己帽子上的数字。他们的共识为:\(a_i\) 符合某一些特定的条件(称作合法),且所有人都绝顶聪明。第 \(i\) 天开始时,如果有人发现自己帽子上的数字不是某个特定的整数,那么在这一天结束时他会向所有人公布该信息,并停止游戏。如果一直没有人发现,则游戏会一直进行。
为了求出第几天时游戏会结束,我们维护一个数列的集合 \(S\) 表示 \(S\) 中的数列都不可能是真实的 \(a\) 数列。初始时 \(S\) 中都是不合法的数列。随后第一天,如果有人发现自己看到的信息符合 \(S\) 中的某个数列,则第一天结束时他会立刻报告以结束游戏。因此,游戏在第一天结束,当且仅当存在 \(S\) 与 \(a_i\) 的编辑距离为 \(1\)。
第二天,大家就会知道不存在 \(S\) 中数列与 \(a_i\) 的编辑距离为 \(1\),因此与 \(a_i\) 的编辑距离为 \(1\) 的数列会立即降低至和不合法一样的地位。可以把这些数列加入 \(S\) 中,然后重复第一天的过程,然后就可以接着递推,得到最终结论:游戏在第 \(n\) 天结束,当且仅当存在 \(S\) 与 \(a_i\) 的编辑距离为 \(n\)。(编辑距离都是指修改次数)后面的部分就简单了,改成最大化相同的位置数,然后变成三维最长子序列,然后发现其中两维都正确偏序时第三维也自动被偏序,于是可以改成二维偏序,复杂度 \(O(n\log n)\)。
25noip二十连测day10(20251028)
- [A Persecution] 二进制贪心
- [B Guiltiness] 异或的性质
- [C Hypochondriac] 二分凸函数套二分凸函数,根号平衡
- [D Reality] 纯数学,计数,同余,矩阵快速幂,有一点找规律的意思
\(100+100+8(90)+35=243(325)\)。傻逼大样例,16 个样例全部过了,都能挂掉 82 分,傻逼啊!
第一题感觉好像见过了。就是从最大值开始往下取一定最优。
第二题先把 \(X,Y\) 改成 \(X\oplus Y, 0\),这样就看的很舒服,很快发现哪些部分是自由的,然后后面的也挺好做。
第三题逆天。有三个凸函数 \(f,g,h\),求出 \(\max_{x,y}f(x)+g(x+y)+h(y)\)。从这个角度看,可以把 \(f,h\) 做闵可夫斯基和,然后再和 \(g\) 对位加,得到的结果肯定是凸函数,因此可以对答案凸函数二分,先二分 \(x+y\),再二分 \(x\)。二分在这里说的是二分凸函数的导函数,找到导函数的零点。我真的是服了,这个二分的部分全部写错,可以过所有大样例。贴一个正确的代码。注意 \(=0\) 的判断,注意答案取谁,注意答案初值。
template <class Func>
LL binary(int l, int r, Func&& func) {
r -= 1;
LL ans = func(l);
while (l <= r) {
auto mid = (l + r) >> 1;
auto f1 = func(mid), f2 = func(mid + 1);
if (f2 - f1 < 0) ans = f2, l = mid + 1;
else r = mid - 1;
}
return ans;
}
最后一个根号平衡结束本题。(\(O(q\log^2V)\) 次询问,但是 \(O(n+q)\) 次修改,分块很舒服)
第四题纯数学题。首先需要发现走 \(n\) 步的方案数是有性质的(这种题肯定要有性质,猜都要猜出来)。然后枚举中间计算贡献的位置 \(\bmod n\) 是多少,假如是 \(u\),这样以后可以暴力跳掉前 \(u\) 个,然后矩阵快速幂转移掉中间的所有 \(n\),最后再暴力跳 \((c-u)\bmod n\) 步。这两个暴力好像也要想一下,但其实不难,肯定能做的,就是简单的同余数论。例如最后的暴力跳,要做的是求一个大区间内有多少个 \(\bmod m=t\) 的数,这个就是两个上取整解决了。
而事实是这个矩阵快速幂没有这么简单,按照刚才这么说只能搞出来一个 \(10\times 10\) 的矩阵。正确的做法大概是这样的。考虑初始时区间 \([l,r]\) 中的值都是 \(c+1\),其它都是 \(c\),然后走过 \(n\) 步之后,就会变成 \([l,r]\) 中的值都是 \(c2^n+len+1\),其它都是 \(c2^n+len\),其中 \(len=r-l+1\)。另外,我们可以计算从区间 \([l,r)\) 出发(区间内方案数都是 \(1\),其它都是 \(0\)),那么走 \(v\) 步之后就是 \([l2^v,r2^v)\),令 \(m=2^n-1\),其中 \(\bmod m=t\) 的点有
用 \(\left\lfloor\frac{a}{b}\right\rfloor=\frac{a-(a\bmod b)}{b}\) 拆掉这个式子,注意到 \(2^n\bmod m=1\),所以 \(a\bmod b\) 这一项是一直不变的。而 \(a/b\) 这一项,要计算的是 \((r-l)2^v/m\),这个就很舒服了。暴力是枚举 \(u<n\),然后维护 \(c\),每次走 \(n\) 步,走完之后立即计算从这里经过关键点之后到达终点的方案数,形式很简单,只需要算 \(\sum 2^vans\) 和 \(\sum ans\)。矩阵快速幂优化,只需要维护 \(c, \sum 2^vans, \sum ans, 1\) 四个值就行了,这样就能通过了。
25noip二十连测day11(20251029)
- [A Influence] 简单组合计数
- [B Revealed] 神秘的两行网格 DP
- [C Jealousy] 数论,双指针
- *[D Return] 概率与期望,拆贡献,模拟消元解方程组
\(100+100+100+15=315\)。第三题比第二题简单没绷住。
第一题,很简单的组合计数,但是可能是没睡醒所以搞了好一会才搞出来。
接下来,第二题比第三题好想(第三题读题的时候就大概明白了关键结论),但是第二题肯定比第三题好写。先做了第二题(所以为什么要先做第二题,就因为预估第三题难写吗?)。额,反正最后就是想出来了,就是看着这个数据范围反推 DP 状态再反推定义和转移。有一个重要观察是只有同种颜色的最后一次出现是有用的。然后可以观察一条往右的路径作为主线,只去推主线,其它颜色到最后再结算。有了这个思路之后,再随便证明一点东西就能把算法修对了。感觉就是很幸运地对上了脑电波。
第三题竟然没有意识到它有区间包含单调性!算了,反正都一样,强行写矩形并扫描线也过了。气笑了。就是对每个点单独考虑,然后把包含这个点的所有不合法区间全部 ban 掉,最后一遍扫描线。
第四题,很难啊,写完 \(O((n2^n)^3)\) 之后就没有更多有效的思考了。还没仔细看。
25noip二十连测day12(20251030)
- [A 子序列] 没有很显然的简单题,字符串、子序列、子序列自动机、贪心
- [B 加加减减] 模拟 DP,维护 DP 数组
- [C 相邻的 1] \((k+1)^{n/k}\) 的状压 DP
- *[D 排列] 排序,平衡树维护排列置换环
\(100+100+60+60=320\)。
第一题硬控了一会,主要是没想到为什么这个东西是对的?呃,好像最后也没想出来。练习了一下写 checker 并对拍,然后就放了。
第二题有 Slope Trick 的嫌疑。不过比那还要简单得多,随便写就过了。题解好像是调整法,没搞懂。
第三题想了一下,好像想起来 CTT2024 的某道题目,做法是数据点分治,两个暴力拼起来。\(k\leq 10\) 的暴力及其简单,但是后面的部分不会。
第四题的结论好像很简单?只用关心每个置换环最小的那个位置,他会给前面的带来 \(-1\) 贡献。暴力就是暴力求出置换环,线性。
第三题想到了 \(k\geq n/2\) 怎么做了,看起来是 \(\text{poly}\ n\) 的,应该能过。想改成可能能过的,就枚举一下中间 \(n-2k\) 个数,应该就对了。但是还是先写第四题,因为看起来有点难写,第四题有一个不修改排列的特殊性质,顺手写了。然后写第三题,写了一半之后决定放弃 \(2^{n-2k}\) 这个部分了,不仅是难写,而且 MLE 了,仔细一看前半的暴力如果 \(k\) 到 \(16\) 也很接近 MLE,自闭了,决定写完 60 分就不写了。然后也是比较顺利地写完了。感觉写的很难受。仔细一看复杂度,\(k\geq n/2\) 的部分的复杂度为 \(O(n^5)\),估计离正解很远了,自闭了。
第四题后面的部分,不会是平衡树吧,有没有好一点的方法。根号好像不行。然后就想不到了。沈队用了线段树分治,两个 \(\log\),得到了更高的分数(没过),怎么没想到。然后题解真的是平衡树维护,有点服了,怎么上来就否掉平衡树然后忘记了。
感觉就是正常下限水平吗?梁队直接过了第三题,还是太强了。
年度文章:OI 赛制比赛 emergency kit(2024 Winter Edition) - Blog - Qingyu✨'s blog
本文来自博客园,作者:caijianhong,转载请注明原文链接:https://www.cnblogs.com/caijianhong/p/19125105/contests-in-202510
浙公网安备 33010602011771号