2024.07 NOI 模拟赛笔记
柳阴直,烟里丝丝弄碧。隋堤上、曾见几番,拂水飘绵送行色。登临望故国,谁识京华倦客?长亭路,年去岁来,应折柔条过千尺。
闲寻旧踪迹,又酒趁哀弦,灯照离席。梨花榆火催寒食。愁一箭风快,半篙波暖,回头迢递便数驿,望人在天北。
凄恻,恨堆积!渐别浦萦回,津堠岑寂,斜阳冉冉春无极。念月榭携手,露桥闻笛。沉思前事,似梦里,泪暗滴。
7.6#
简单写点省队集训考试题和讲课的题。
T2 UOJ427 化学竞赛#
给定一个大小为
的阿贝尔群,再给定一个序列 ,其中每个元素都在群中, 次询问一个区间内的数的生成群大小。
一个结论是 Abel 群可以被直积分解成若干个循环群,即如果
然后就是 OI 内容了,考察所有
接着问题转化为求区间并的位数,但是
T3 UOJ705 黄忠庆功宴#
给定一个大小为
的环, 次询问每次从环上 点跳 步每步跳 个间隔,路上所有点 加起来是多少。 是质数, 。
暴力做法:断环成链,然后暴力跳。这个做法能扩展到
还有一个思路:发现走到边界返回开头这个过程是比较关键也是我们不好处理的,我们能不能尽量把这部分简单化?
两部分殊途同归,有两个做法:
第一个是考虑我们在走
但是这两部分还是没办法平衡,
其实这个做法的本质还应该是考虑
但是这个还是很严格,还是太抽象了,于是有方法二:考虑每次我们不走到初始点加一,而是放宽限制,到加小于根号,这个可以发现如果你一次迈过的间隔大于根号,那必然在根号步内能到,证明是类似的,考虑集合
然后这个就跟上面差不多了,分成根号个公差根号的等差数列,预处理即可,这个的本质也差不多是把等差数列作小的划分,殊途同归。
7.7#
T1 QOJ5034 >.<#
有一张
个点, 条边的带权有向图(无重边、自环),再给定 条路径,求一条 1 到 的最短路径(不要求是简单路径),使得这条路径不包含给定 条路径中的任何一条(包含指连续地经过某条路径)。输出此路径的长度,如果找不到输出 −1。
不会官方题解,讲一下自己的做法。
先考察
我们还得加上一些边完善这个图,注意到上面的限制其实不是充要的,因为我们如果走了一条路径组没有的边,但是他的 fail 父亲有,我们还得转过去,这个可以通过继承父亲的后继做到,做这个可以主席树或者暴力合并,我自己算的暴力合并大概是根号,可能更劣,但是很难卡,因此也过了。
而对于一条边
T2 QOJ5029 在路上#
有一棵未知的树,保证树的大小为奇数,你需要找到这棵树重心的编号,你可以进行询问,每次询问你可以询问三个点
,若不存在一条简单路径同时经过三个点,则交互器会返回 0,否则若存在,那么交互器会返回三个点在路径上相对顺序中间的一个点。
这个题要求询问次数
树怎么办?这时候重心不再是中点了,我们还是考虑放到链上做,一个关键观察是随机期望两次就能随机到一条链且经过重心,这是很好的,我们还是相当于求带权中点,但是找到之后还得判定,一个快速的方法是摩尔投票,于是现在我们需要解决带权重心的问题。
先找到链上所有的点,链的做法是随机点然后分到两边,这里我们也要把不在链上的点分到两边,但是这里每个点都挂了很多子树,如果你直接做就可能一直找不到重心然后退化多一个
实际实现可能还要卡卡常数,但是我是口糊选手,有心情可能会再去写一下。
T3 QOJ5017 相等树链#
给定两棵点集均为
的树 。问有多少个点的非空子集在 上均为一条链。 。
提纲挈领地说一下,做法细节比较多。
树链问题先对第一棵树淀粉质,然后这时候我们就发现两条需要拼起来的链贡献没办法独立,而且第二棵树的贡献很难处理,这是不好的,那我们就尝试找找性质。
把需要合并的两条链的位置在第二棵树上表示出来,我们把第二棵树上的根定作淀粉质的根,设两条链开始和结束的端点分别是
再分离
如果都在
列出式子,合法其实就是异或相同,然后分别异或到两边就能分离
但是还有一个问题,如果
7.9#
昨天普及场,就没写笔记。
今天也是简单题,但是写得一坨。
T1 aw#
给定一棵
个结点的树,结点 有 个 ,定义一组给所有 条边定向的方案的权值为:按输入顺序依次考虑每条边 将结点 的 全部移动至结点 ,最终每两个 所在结点之间的距离之和。两个结点之间的距离为它们在树上的最短路径经过的边数。求所有 组方案的权值之和,对 取模。
点对距离套路地放到边上考虑,这条边对距离和的贡献就是
设
那怎么办呢?要点积是因为我们把权值和事件绑定在一起了,导致对应事件只能互相相加然后平方,这里感谢 HeHeHyt 佬,一个重要的观察是两边是独立的,我们就不用管具体情况,只要两边单独算然后直接卷积就行,或者一个更方便的情况是算期望,这也是发现方案不好算之后的一个解决方法,因为期望可以直接卷积。
T2 awa#
给定两个由小写字母组成的字符串
。求有序二元正整数对 的数量,满足 ,且 的长度为 的前缀和长度为 的后缀拼接得到的字符串是 的子串。这里,拼接表示将后一个字符串拼在前一个字符串之后。
赛时没空想了,但是后面发现其实很简单。
首先考虑我们肯定要找到某些办法确定一些东西,不然限制太散不好直接求,多试试就发现枚举拼接起来的位置是比较好的,那问题就转化成有多少这个位置向前或向后延伸的字符串是
那我们现在就要求合法点对个数,枚举所有位置的两个点的祖先会有重复,我们不妨直接枚举
T3 awaw#
在
的网格上有 个矩形,第 个矩形覆盖了 且 的所有格点 。求没有被覆盖的格点形成的所有四连通块的大小的平方和。所有 和 都相同。
这个题出奇简单,关键就在于考察所有
7.10#
技不如人,甘拜下风。
T1 QOJ7877 等差#
给定一个初始为空的数列,每次往数列末尾插入一个数,并询问是否存在一个
的 使得数列每个下标模 相同的位置形成的子数列都是等差数列。 。
注意到一个
二分之后就变成了判定在某个
但是我们其实还可以去掉这个
T2 叉积#
在平面直角坐标系上有
个点 。 次询问,每次询问给出一个点 ,请找到区间 ,使得 并输出这个最大值。
考察叉积有分配率,我们可以直接算前缀和,或者考虑
把叉积的式子写出来后可以发现最优的点其实都在凸包上,也就是说我们要求出所有前缀和相减的凸包,这里只能后面减前面,减法凸包和加法凸包类似,以及前面的线段树最大子段和算法,启发我们在序列上分治然后闵可夫斯基和维护凸包,这个题就做完了。
T3 qoj1262 序列变换#
给定数列
,保证 互不相同,你可以进行如下操作任意次:选取 ,将 加一。操作完毕后 仍然需要互不相同。又给定数列 ,保证 互不相同,请问有多少种操作序列能够将 变成 。 。
感觉很精妙的推柿子题,综合运用了很多知识!
首先是一步非常智慧的转化:我们把
然后就是一些比较平凡的操作,应用 LGV Lemma,把行列式拆开,我们要求的就是
怎么算路径组方案数?问题等价于我们现在有
然后要加上条件,把选不同变量这个条件容斥掉,设
这里的
然后看到最开始,由于我们用生成函数分离了各部分,也可以直接求行列式了,暴力维护多项式会超时,我们可以把变量代几个值进去然后后面插值,这样就能通过全部数据,考察知识全面的一道好题!
7.11#
FJOI 场。本来不想写了但是这个 T1 我有点不太会。
T1 P5998 Plemiona#
给定
个矩形,有公共点的矩形会进行合并并变成一个恰好包含两个原矩形的新矩形,问不再有合并发生时的所有矩形。
矩形并首先考察扫描线,我们扫
T2 QOJ888 Travel around China#
给定一个
的网格,点有点权,问任意不同两点间最短路的和。
额,我能说啥,网格图最短路的一个常用方法是分治,然后你只要处理到中间最短路,dp 即可,然后就做完了。
T3 燕鸥#
燕鸥年复一年地往返于南北极。燕鸥的行程一共经过
个补给站,它的初始体力为 0,第 个补给站能补充 单位体力。燕鸥的飞行高度和体力正相关,如果它的体力不小于 ,那么它会因为飞得太高而错过补给站,这样它反而会损失 单位体力。燕鸥可以对任意一个补给站使用一次提醒机会,这样它一定不会错过那个补给站,从而补充 单位体力。请你帮燕鸥求出,它选择哪些补给站使用提醒机会时,它的最终体力会落在区间 中。
注意到这个东西的规律大概是
7.12#
T1 电车#
给定
,你需要计算有多少个 的排列 满足完全积性函数的性质。即对于任意 都有 。
先考虑一些性质,由于这是完全积性函数,每个位置上的值必然要满足某些限制,但是从限制的角度来看比较难考虑,我们不妨只确定质数位置上的数并考察这种钦定是否合法。
首先,单位排列肯定是合法的,那其他排列呢?不妨只考察两个质数能否交换,因为每个质数相对独立,一个质数的位置比较不会受到其他的影响。如果我们交换这两个质数下标位置上的数,不妨设为
不难发现这种交换可能不成立,不成立当且仅当存在一个
T2 波长#
对于一个序列
,可以对其进行若干次操作,每次将一个数减少 1。定义 表示进行 次操作后序列的最大子段和最小能达到多少。给定 ,计算 ,答案对 998244353 取模。
看起来很典但是很神秘的题,考场上糊了一个贪心+线段树,直到最后也没调完,现在想想应该是贪心的部分假了,不需要猜结论的做法还是舒服。
这个东西看着就很不好做,既然不猜结论贪心那我们就先往判定的角度想,考察对于一个值
但是这个边太多了,我们不能直接跑最短路啊,但是这个边也没有什么性质,不太好做,没有性质创造性质,令
但是这个最短路是依赖
然后你就发现这是若干个一次函数,我们可以放到凸包上,原先要求的是所有操作后的最大子段和最小,现在我们建的凸包相当于给你子段和求最小操作次数,所以你相当于要对
T3 捕获#
不会,有没有人教。题解太抽象了。
7.13#
UNR DAY 1,没写题,下午 mai 去了,UNR 之后不能摆了。
UNR8 D1T2 UOJ888 里外一致#
给定一个序列,有
次询问,每次问序列中的一个区间有多少个子集满足子集内颜色数等于补集颜色数(补集是区间),对 取模, 。
这个主元法太牛了!利用模数性质实在是没绷住。首先我们你考虑把所有颜色都拉出来,然后选两个集合大小相同很容易就能让人想到生成函数,设
然后怎么办呢?二次项是难处理的,考虑先做一些简化,我们设
这就是纯纯的卷积形式了,但是我们单独算一项肯定是不好算的,这时你发现模数是
暴力卷积是三个 64 的,我们有若干优化方法,例如先 ln 再 exp,这时要把若干一次多项式并行计算,或者直接发现是微分有限的然后整式递推,这个你可以设原式为
水 u 群的时候发现一个小结论,说模
UNR8 D1T3 UOJ889 二维抄袭检测#
给定一个字符串矩阵和字符串,每次问一个子串在矩阵某个位置开始的最长匹配长度,只能向右或者向下走。
。
如果我们考察匹配的过程可以发现在
考虑这个东西很能矩乘优化,但是每次询问转移矩阵都不一样,我们得先解决这个问题。先做点简单的处理,把第
接着就是上猫树,压位矩乘,然后利用非 0 元素个数优化,就做完了。
7.14#
UNR DAY 2,还是没写题,下午去打羽毛球。T2 对格点分治然后小优化,感觉不怎么 educational,就不写了。
UNR8 D2T1 UOJ890 兵棋#
小重和小庆正在下“兵棋”。
个士兵棋子排成一行,每个士兵要么是小重的要么是小庆的。接下来有若干天,每天如果第 个士兵和第 只士兵不属于同一玩家,那么第 只士兵会击杀第 只士兵。所有击杀操作会同时进行,士兵被击杀后会被移除。例如,如果某一天第 3 个士兵击杀第 4 个士兵,第 4 个士兵击杀第 5 个士兵,那么结果就是第 4 个和第 5 个士兵都会被移除。现在小重和小庆已经在一些位置上摆好自己的士兵了,但他们还没确认其余位置摆什么士兵。你需要对于所有方案,求出 天后剩下的士兵数的总和,答案对 取模。
我真不觉得这个 dp 有多好想,如果你没有去想对时间轴记录的话,反正我想了 45min 左右,可能还是得想想朴素的东西。
找性质很难,考虑每个点会不会被删只跟前面的数怎么边有关,然后你暴力记录前一个位置每个时刻是 0 还是 1,然后转移的时候类似给最低位加 1 和减 1,但是你发现我们不关心具体方案,只关心有多少个 1,然后记录这个就做完了。
UNR8 D2T3 UOJ892 大海的深度#
若干次单点修改,求整个序列所有子区间 min 和。
,时限 8s。
对答案贡献的拆分不同,引导出了两种不同的解法。
解法#
对序列分块不太好做,考虑对询问分块,把这几次询问涉及到的点拎出来,这些点把整个序列分成若干段。在这种情况下,我们可以把答案看作
先考虑
如果每到一个段,我们都把单调栈所有数拉出来找影响区间然后算贡献,这最优只能做到
解法#
考虑直接处理每个区间,分治,考虑所有跨过中点的区间,然后从小到大扫描
作者:eastcloud
出处:https://www.cnblogs.com/eastcloud/p/18288095
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现