20250215 NOIP 模拟赛
A.diff
题面: 给定一个长为
题解:
首先我们可以证明对于一个首项和公差
证明:考虑如果出现重复的数即有
即 ,由于 是质数和 ,所以 一定是 的倍数,所以在前 项中都有 ,不会满足条件,那么 的每个数会出现一次。
我们任意找到两个数字,他们的差记为
- 如果
,那么序列 中恰有 个数 满足 不在 中,得到 ,然后检验若 不存在,则 是首项。 - 如果
,那么我们就对 取在 中的补集做上面的算法求得首项和公差,那原序列的公差和补集的公差是一样的,首项就是补集最后一项再加 ,因为这时会成环,所以 就是原序列的首项。
这样这个题就完成了。
为什么要以
因为我们在获取到
后计算 的时候,如果 ,由于前 个每个数只出现一次,那等差数列最后的 个数的 都是还没有出现的数。如果 ,那最后 个数中有若干个会成环而导致 少算。
B.pairs
题面: 求长为
题解:
我们考虑每次往一个
设
那么我们可以进一步的观察
对于一个集合
表示的组合意义就是,考虑集合
中的数不满足 ,那我们先把 中的数 都先放上 个,剩下的 个随便放给 个人。这样就保证 中的数都一定不满足条件,其余放任自流,容斥系数是 。
考虑求出所有的
- 一种是将当前集合内所有数全部
。即 例如 - 一种是将当前集合内所有数都
,再加入一个 。即 例如
对于每一个集合,有且只有一种操作方案得到,即 倒推操作 如果当前集合没有
,那上一步就是操作一,否则就是操作二,所以每个集合都正好会被算一次。
复杂度:枚举
C.unicom
题面: 给一个
题解:
区间询问但可以离线。考虑分治,将询问离线之后猫树,因为只有
注意并查集合并时要让离
更远的点连到离 更近的点上,这样只还原 周围点的时候才对。
D.similar
题面: 给定一个长为
题解:
考虑怎么判断两个区间符合条件:将其间的元素桶排之后,要么全部相同,否则第一个不同的桶和最后一个不同的桶必须正好互补,并且中间不能有值。
使用权值线段树来桶排,用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探