NOIP 历年题集
2015
D1 T1 神奇的幻方
简单模拟。
D1 T2 信息传递
可以发现,我们要求的即为该有向图的 最小环,观察该图,是一个内向基环树,我们可以直接 dfs 找环即可。
D1 T3 斗地主
好像是个爆搜剪枝?不想写。
D2 T1 跳石头
显然可以二分一个
复杂度
D2 T2 子串
考虑动态规划,设
则有转移方程,若
前缀和优化一下则复杂度为
D2 T3 运输计划
蛮好的题。
首先有二分一个
而对于如何覆盖路径,可以暴力树剖,更简单的可以树上差分。
复杂度
2016
D1 T1 玩具谜题
一点分讨。
D1 T2 天天爱跑步
豪题。
对于树上一条路径
- 若
在 上,则需要满足 。 - 若
在 上,需要满足 . - 否则
不在 上,一定不成立。
所以对于一条路径
- 我们在
节点上存 ,并在 上存 。 - 我们在
节点上存 ,并在 上存 ,不能多减贡献。
当扫描到该节点时用两个桶分别记录两种贡献,对于节点
对于统计答案,即为
桶可以 map 也可以数组,复杂度瓶颈在求
D1 T3
D2 T1 组合数问题
可以直接递推求组合数,再二维前缀和下即可。
D2 T2 蚯蚓
即每次取出最大点后全局加,显然可以简单优先队列维护,不过复杂度是
我们观察下性质,
所以我们可以维护三个队列,表示原队列,
对于全局加,可以等价于单点减,维护一个全局标记即可。
复杂度
D2 T3 愤怒的小鸟
由数学知识可得,三点可以确定一个二次函数,题目中有固定点
设
复杂度很满,考虑优化,对于状态
对于求 __builtin_ctz(~now)
,这个函数是求二进制尾部存在多少个
2017
D1 T1 小凯的疑惑
答案即为
等我补证明。
D1 T2 时间复杂度
脑瘫模拟,不会。
久远代码,我自己都不知道在写什么。
D1 T3 逛公园
对于
复杂度
D2 T1 奶酪
若两个圆相交,则可以合并,可以用并查集维护,复杂度
最后首尾判断是否联通即可。
D2 T2 宝藏
则我们可以枚举
总复杂度
代码,
考虑优化,令
没写代码。
D2 T3 列队
?
2018
D1 T1 铺设道路
区间减相当于差分数组的单点修改,则我们求出差分数组,找出最大修改值即可。
D1 T2 货币系统
我们发现,对于价值为
复杂度
D1 T3 赛道修建
首先可以二分
复杂度
D2 T1 旅行
找环,暴力断环即可,复杂度
不会
D2 T2 填数游戏
分讨你妈。
D2 T3 保卫王国
DDP,历史第一。
不看修改,该问题是树上最小全覆盖集。
看修改,好麻烦。
2020
T1 排水系统
忘了,不想看。
T2 字符串匹配
首先,我们可以设
这样我们可以枚举
对于统计
可以发现值域很小,可以直接统计,复杂度
有更优的做法,我不会。
代码,
T3 移球游戏
我们考虑如何将一种颜色移到一个柱子上,我们考虑两步,设当前我们要的颜色为
- 首先我们选定另一个非空柱子,我们移动顶部
个到空柱子,然后对于当前柱子,若其颜色为 ,则将其移动到另一个非空柱子上,否则将其移动到空柱子上。 - 然后我们将移到空柱子上的当前柱子先还原,然后还原颜色为
的球,最后还原空柱子剩下的球。
这样我们将所有颜色为
重复
如何优化?我们做了
T4 微信步数
对于每个维度,维护走出步数区间,直接统计答案,不会。
2021
T1
T2
T3
T4
2022
T1 种花
后缀和,下缀和随便弄弄,复杂度
T2 喵了个喵
我们首先考虑
当我们将每两种卡牌放到1个栈内,最后会多出1个额外的栈,我们就可以把这个栈作为辅助栈,进行操作2,再考虑将第
所以我们就可以得到以下的解法,当我们将卡牌
- 当栈
为空时,直接将 入栈。 - 当栈
有一个元素,且这个元素与 相等,则直接将 入栈,并消掉。 - 当栈
有一个元素,但这个元素与 不相等,则将 入栈。 - 当栈
,且栈顶元素与 相等,则直接将 入栈,并消掉。 - 当栈
有两个有两个元素元素,但栈顶元素与 不相等,则栈底元素一定和 相等,这时将 入到辅助栈内,用操作 消掉。
这样就得到了 15 pts。
接下来我们考虑
有很明显的一种写法,对于数字
我们抛开栈
- 如果遇到的数字
未出现在栈中,则就把 入到一个还没满 个元素的栈,如果有 个栈都满了就代表这种策略走不下去了 (因为我们必须留一个辅助栈)。 - 如果
已经出现在栈中了,则按照上一个方法消掉 。
直到走不下去了,此时一定是有
此时我们考虑P的放置方法:直接把
我们考虑离线:也就是说,我们开始预知这个数后面都是什么数,依据后面数的情况,我们考虑
如果不考虑当前
因此发现,如果
现在讨论
此时未来的数列是
- 如果未来数列的
和 之间, 出现了奇数次:把 放入辅助栈,接下来一直自由相消,直到将处理 为止。由于 的数量是奇数,加上一开始的一个 ,此时 一定被消除光,现在 的栈顶变成 ,将 放入 栈顶相消, 变成了空栈。 - 如果
出现了偶数次:把 放入 ,未来所有不为 的栈顶自由相消,对于 我们将其全部放入辅助栈相消,直到将处理X为止。由于 的数量是偶数,这些 一定都被消除光,辅助栈仍为空,我们将 放入辅助栈,和 栈底相消,辅助栈仍为空。
经过上述操作后始终会满足存在辅助栈,栈内最多只有两种元素,所有数在栈中只出现一次,所以我们可以一直执行。
复杂度
T3 建造军营
对于一个环内的任意两条军营,切断任意哪一条路径都不会影响两城市的联通,即环内的点时没有影响的,我们可以考虑缩点成一棵树,只有树边需要考虑。
设
初始的有
则对于
对于节点
复杂度
T4 比赛
扫描线,可以单调栈维护,该为区间加,对于询问
然后我们需要维护的即为
对于数据有
对于标记有
对于标记合并有 $
2023
·
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现