Solution Set - 神奇 NOIP 模拟赛
「A. 莓良心」 给定 ,对于所有将其划分为 个非空集合的方式,求 之和的总和模 的值。。
考虑算每个 的贡献次数,首先 自己算一次,;任意 的 和 放一次时贡献一次,, 算第二类斯特林数单点值即可。
「B. 尽梨了」 给定 ,初始时 ,每次选一个未选过的 ,令 ,需要保证此时 。求最多能选择的次数。,。
交换贪心可知确定要选的集合时最优的选取顺序,依此排序后,问题变为从其中依次取子序列。注意到 的必然最后选,且按 从小到大选; 每次选择至少有 ,对于这种情况直接 DP,最后考虑 即可。复杂度 。
「C. 团不过」 有求 堆有标号石子堆,每堆石子数量在 且不存在两堆相同数量石子堆时,Nim 先手必胜的方案数。。
令 为仅考虑 堆石子的方案数,显然可以通过下降幂、 和 进行转移。复杂度 。
「D. 七负我」 给定无向图 ,给每个结点赋非负实数权值 ,使得 ,最大化 。。
调整法证必然有一种方案, 的结点的导出子图是团,团内部的最优决策显然是平均分点权(可以不等式或者口算一下拉格朗日乘子法),继而发现取最大团最优。这里直接 Meet in Middle 求最大团即可。复杂度 。
「A. 特殊字符串」 水。
「B. 宝可梦」 给定一个 ,有墙或空地的迷宫,保证空地在四联通意义下构成树。接下来 组询问,每次给定起点,第一步方向(保证不撞墙)和终点,求从起点摸着右手的墙走,需要走多少步到终点。,。
分析清楚题意后,直接拆四个点建图。注意到可能作为起点,或者可能是中间过程的点必然是两两可达的,所以图是一整个环,在环上随便写写就行。
Attention. 图在具体题目的具体性质分析清楚再动手,直接搓一个基环树森林的做法太浪费时间了。
「C. 矩阵」 给定 的矩阵 ,找一条四联通意义下的路径,使得依次经过的元素构成等比序列,或声明存在长度无穷大的路径。。
先判掉无穷大,之后枚举第一步然后记忆化搜索可以做到 ,或者 DP 一下可以做到 。
「D. 乘法」 求十六进制下 除去末尾 后的最后 位。,多测 。
先求出 含因子 的个数,接下来要求出
其中 ,问题转化为求双阶乘。令 ,那么 ,且 ,注意到当次数 ,,所以可以暴力卷积。在二进制扫描 的同时倍增,可以做到 。
2021.11.01. 总之就是四道傻瓜题。
「A. 集合均值」 水。
「B. 聚烷撑乙二醇」 水。但出题人不写浮点比较 SPJ 还卡精度。
「C. 技术情报局」 给定 ,求 ,序列随机,模给定数 。。
单调栈 嘛,我告诉你能做就肯定能做的啦~
「D. 肯德基」 求 。,数据组数 。
容斥,答案显然是
其中 。发现可以用 对 进行整除分块。复杂度方面,当 ,仅有 个取值;当 ,有 ,也仅有 个取值,所以分块复杂度为 。总复杂度即 。
「A. 按位或」 求序列 的个数,满足 ,。答案模 。。
不太签到的题。联想十进制下 的结论,发现 等价于从最低位起,相邻两个 bit 为一组,各组数值之和是 的倍数。容斥没有满足或起来为 的 bit 组计数即可。
「B. 最短路径」 给定一棵含有 个点的树,以及其中一个大小为 的关键点集 。对于 中 的子集 ,求依任意次序遍历过 中所有结点的最短路径长度的期望。答案模 。,。
遍历 的最短路径长度显然是 的虚树所含边数 减去 的树上直径,分别计数。对于边数,枚举边,求这条边两侧都有关键点的方案数;对于直径,令 表示 的树上距离,对于路径 定义一个严格偏序关系:
其中 指一般的二元组偏序关系,当然也可以替换成方便区分的其他式子。在此基础上,可以证明对于 ,若不存在 能够使 变大,则 是直径。枚举直径 ,求出无法更新直径的点集 ,剩下的 个关键点都取自 ,组合算贡献。
为什么我忽略了边数和直径可以拆开算啊……
「C. 仙人掌」 给定一株仙人掌,求其邻接矩阵的行列式。。
等价于边匹配,得到的排列中,二阶轮换的贡献是 ,其余 阶轮换的贡献是 。圆方树 DP 即可。
「D. 对弈」 Cover「SDOI 2011」黑白棋。我不会,但是。
2021.11.03 @ LOCAL/20211103/
「A. 鲜血之女王」 水,不过赛时无脑 DP 压根没证正确性(虽然过了。
「B. 撤离」 求排列 冒泡排序恰好进行 次 swap 后得到的排列。。
我真的做过这道题吗? 我会求进过完整 轮后的交换次数,也会求到经过完整 轮后得到的排列,而一轮最多 swap 次,所以在这个排列的基础上再模拟一轮冒泡即可。
「C. 闪蝶」 水,线段树维护 GF 板题(但是选手不得试图使用生成函数。
「D. 缘分的天空」 给定一棵含 个结点的树,对于 ,求随机切树上 条边得到的森林中,每棵树所含结点数量的平方之和的期望值。答案模 。。
其中 表示原树上长度为 的路径条数。若能求出 ,可以发现这个式子是差卷积:
好吧其实难点是实现,求 可以 DSU 或者点分,但得写多项式卷积。注意路径条数不超过 ,所以可以写模 long long
的 NTT。但是最后这个卷积是真的没办法——只能写 MTT。总之吧我一份代码写了 MTT + NTT,常数大概是标算的 倍叭。但是有 9K 的码量。
「A. 谜之阶乘」 水。
「B. 子集」 将 划分为 组,每组大小相等且数字和相等。多测,。
每组大小是偶数显然;若是奇数,尝试先用一些数组把每组大小填充成偶数。观察样例并打表发现可用 填每组前 个,具体构造方法多种多样(我懒得描述了√
「C. 混凝土粉末」 初始全为 , 次操作,区间加,询问某个 最早什么时候 。。
对不起两个 log 无脑整体二分能操过。 离线下来,在序列上做扫描线,在时间轴上维护 BIT 或线段树,树上二分求答案,即可做到单 。
「D. 排水系统」 挺可爱的题 w。我的题解。
「A. 回文」 给定字符矩阵 ,求从 出发走到 且只向下或向右走的所有路径中,依次经过的字符形成回文字符串的路径数量。。
明显只能从起点和终点同时 DP。 表示起点终点各走 步,起点走到第 行,终点走到第 行,当前行走路径字符串对称的方案数。讨论一下转移,滚掉第一维状态就行了。
「B. 快速排序」 水。
「C. 混乱邪恶」 给定 ,。求 ,且 。。
要看出这是道构造题而非乱搞题就很难啊喂。 如果 是奇数,令 。将 的元素升序排列后,令 ,我们尝试用 来构造等和。(为什么想到两两捆绑?这就是传说中构造题的 movitation?)
观察 的性质:(利用题设性质,太 tm 妙啦),即至少有一个 。接着归纳构造:
-
若 ,由于 ,必然有解;
-
否则,将 中最大值和最小值(必为 )取出,将它们的差值返还。
这个方法显然是很厉害的。
「C. 校门外歪脖树上的鸽子」 给定一棵维护序列长度为 ,随便划分区间的线段树,支持 次区间加或查询区间和操作。但是标记不下传。。
左右加哨兵,变成类似 ZKW 线段树的形式,修改查询都类似于走一条路径,修改/统计某侧儿子的贡献,所以你永远可以相信 毛毛虫剖分。
「A. 破门而入」 水,但有个傻子拿 EGF 推出式子准备开始写暴力卷积的时候发现这是第一类 Stiring 数。
「B. 翻转游戏」 从读完题到证完结论不到 30s.jpg。
「C. 奶油蛋糕塔」 总不能看不出是欧拉路吧,但有个傻子状压连通性+状压度数奇偶性大力 DP WA 了。😅
「D. 多重影分身之术」 建议换道题放 T4。
我敲?这就是今天的题解吗?!
2021.11.07. 总之就很辣鸡。
2021.11.08. 今天是 Yet another NOI Professional Simulation。(
「A. NOIP 2018」 水。
「B. CSP 2019」 给定 阶矩阵 和列向量 , 次询问,每次询问给出 ,求 意义下的 。。
取 的特征多项式 ,由 定理,。令
那么 。而 ,考虑答案形式为 ,可以预处理 快速求解。
写不来,全程口胡。
「C. CSP 2020」 定义正整数 的拆分是数列 ,满足 ,此时将 依次写下作为一个十进制数 。现给出 ,对于 ,求 的所有拆分得到的 去重并升序排序后的第 个数。答案模 (不保证为素数)。。
注意到成为答案的 应有 。因为在 中选若干个 减去 ,令 加上减去的总和,这一方案数的规模远大于 。
回到题目,这种题惯用手法是确定位数,再从高到低枚举,用方案数判断当前位的取值。预处理约 范围内的方案数,对于超过该范围的方案,组合数的快速增长让我们可以快速判断与需求方案数的大小关系。最后,只特判后导 的起始位置即可。总复杂度为 。
「D. NOIP 2021」 对于素数 ,取其原根构成的序列 作为密钥,对于明文串 ,定义加密 。现给出 和密文 ,解出明文 。,。保证明文是有意义的英文段落, 是大小写字母以及 中的一个。
任取一个 的原根 ,令 ,显然 。那么 。 是可求的,我们枚举 ,解同余方程就能够得到若干可能 ,用 尝试解密一些 即能判断合法性,考虑到对于错误的密钥,解出字符在字符集内的概率极小,视为 。现在就几乎能完成解密了,不过很卡常。
联系 是英文文段以及生活实际,猜测一些字符在至少 个位置中必然出现,关键问题是找到方便后续计算的字符。注意到 ,即 完全来自 。注意到 时恰整除 ;当 时, 的倍数全为非法字符。所以直接考查 对于它们的整除性即可。
看什么看,我写 T 了。
「A. 开挂」 水。
「B. 叁仟柒佰万」 水。
「C. 超级加倍」 给定一棵树含 个结点的树,求路径 的数量,使得 ,且 是路径经过结点中标号最小的, 是路径经过结点中标号最大的。。
我是不是傻 qwq。 点分治?我想我优化不动二维偏序。而注意到树上最大最小,应该联想到笛卡尔树。建出大根笛卡尔树和小根笛卡尔树,那么 合法当且仅当在大根树上 是 的祖先,在小根树上 是 的祖先。在一棵树上 DFS,BIT 维护另一棵树上的 DFN 即可。复杂度 。
「D. 欢乐豆」 给定含 个结点的有向完全图,边 的权为 ,现修改 条边的点权,求两两最短路之和。,。
显然由修改的边构成的图中,不同的连通块相对独立。在一个连通块中,可以线段树优化 Dijkstra 暴力做最短路。所以可以做到 。有一些并不太困难的小细节叭。
「A. 嗑瓜子」 水。
「B. 第 k 大查询」 给定排列 ,求所有长度大于 的区间的第 大值之和。,。
从 到 枚举第 大值 ,一个区间的第 大为 当且仅当其中包含恰好 个大于等于 的数。维护已经枚举过的值,发现可能作为合法区间端点的只有 段,暴力计算答案即可。
神 tm std::set::iterator
的自加是最坏 的,只有扫描整个 set
是均摊 的(相当于遍历一棵树),T 飞了。
「C. 树上路径」 给定一棵含有 个结点的树,设 是两条点不交路径的长度(经过结点个数),求可能的 的数量。。
路径点不交,那么存在一条边,使得割掉这条边后两条路径分别处于两棵子树,换根求出两棵子树的直径后转化成矩阵并(其实就是后缀最大值)。(换根有点细节别写错了 qwq。
「D. 糖」 数轴上依次有 个关键点,第 个点为原点,第 个关键点的坐标是 。你从 出发,每走一单位吃掉一颗糖,每到达一个关键点,可以以 的单价买糖,以 的单价买糖,但最多携带 颗糖。求到达 号关键点时的最小花费(假设你初始的钱足够多)。,保证有解且答案有限。
做这种买卖问题的一贯套路是:凭空买,凭空卖,等价操作赚大钱。我们直接从等价操作的角度研究:
-
买入再以相同价格退掉 不买,所以每到一个关键点可以补满背包。
-
买入,篡改价格,退掉 低买高卖,所以我们只需要处理“买”和“退”两种操作。
实现上,走到 时,维护当前背包内剩余的糖果集合 ,并保持价格单调性。将背包内所有价格 的糖果价格篡改为 (卖);将背包内所有价格 的糖果价格改为 (重新买),并用当前 补满背包;最后吃掉下一步需要的糖果(挑便宜的吃咯)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现