2015 北京省队集训
2015 北京省队集训
Day 1
训练题
树的难题
给定 n 个点的边带权三色树(黑白灰),定义“均衡的”三色树为“不存在黑点”或“只存在不超过 1 个白点”。
删掉一些边得到“均衡的”森林,最小化删掉的边权和。
数据范围
key:dp
秘密任务
给定 n 个点的边带权无向图,定义“逃跑路线”为从 1 到 n 的任意一条最短路。在边 (u,v) 上设置检查点,代价为
可以设置任意多个检查点,最小化总代价,使选择任意“逃跑路线”,都可以拦截成功,并判断最优方案是否唯一。
数据范围
key: 最短路图 + 最小割唯一性
- 求出 1 到 n 的最短路
- 保留在最短路上的边 (
) - 求最小割
- 判断最小割是否唯一
当且仅当所有必定出现的边权和等于最小割。
引理:有向边(u, v)必定出现在任意最小割中,当且仅当在最终的残留网络中点 1 可达点 u,点 v 可达点 n。
数对统计
给定序列
数据范围
key: 离线排序 + 合并答案区间
对于单个 v,删去所有小于 v 的数后,序列分成若干个区间,合法答案一定包含在这些区间之中,计算平凡。
离线询问,按 v 从大到小排序,每次修改 v 相当于合并区间。
Day 2
训练题
冻结
给定平面上 n 个点,m 次询问求距离小于等于
数据范围
key: 离线 + 并查集
把距离排序一下,瞎搞就行。
灵魂宝石
初始有 m 颗宝石,每天减少一颗宝石,没有宝石就会死。
现在有 n 个 boss,描述为
在第
若挑战:
- 先 失去一颗宝石
的概率成功,获得 颗宝石(若当前宝石数大于 m,自动变成 m) 的概率失败,立即死亡
钦定一个挑战选择,最大化存活天数的期望,输出这个期望值。
数据范围
key: 倒推概率dp
若不打
若打
孵化者
n 个人,每人两个 bool 属性
按顺序操作:
- 赋值
可以操作任意次,最大化
数据范围
建有向图,两个条件:
- 若 i 可以到达 j,则 i,j 只能选一个
- 环上的点一定不选
key: DAG 的最大独立集等于最小可相交路径覆盖
证明显然,一条路径只能选一个点。
在原图中算一下连通性,若 i 可以到达 j ,则在二分图中连边。答案是有效点数
Day 3
训练题
串匹配
给 n 个模式串和 m 个母串,对于每个模式串,输出是否出现过;对于每个母串,输出出现了多少(个
数据范围:
key:AC 自动机
宝石迷阵
纯模拟,不说了
*加权 n 皇后
给定 n*n 方格,每个格子上有权值。放 n 个皇后,最大化皇后所在格子的权值和。
数据范围:
一些可能性:Dancing-Links(X-links),模拟退火
讲课
搜索和非确定性算法
Day 4
训练题
有向图
n 个有向图,开始所有棋子在 1 号点,每次选一个棋子移动,不能移动者输。问是否有先手必胜策略,并给出第一步的某个可行方案。
key: SG 函数
组合数
求
数据范围
第一眼你可能想使用 exlucas 定理,但是
突破口在非常小的 m,考虑写成
暴力:质因数分解,对每个质因数求
std:应用 exlucas 的思想,先中国剩余定理拆开再算同余式。
买零食
类似二维偏序查找的一个东西(?
二分、st表等瞎搞一下即可。
Day 5
训练题
*基因测序
给定 n 个长度不超过 64 的 A T G C
模式串,求最短的母串,包含所有模式串。
数据范围
常规的,我们使用 AC 自动机上状压 dp 来解决这个问题。
但是数据范围并不允许
基因对齐
求两个字符串的最长公共子序列。
数据范围
直接使用空间 O(n),时间 O(n^2) 的 dp,跑大约 400s
基因发现
给定一个文本串,求最长的出现至少 3 次的子串。
数据范围
key:二分 + hash
若存在长度为 k 的合法子串,则一定存在长度为
显然,长度为 k 的子串只有
预处理前缀 hash 值,就可以 O(1) 查询任意子串的 hash。
复杂度
Day 6
训练题
路径排序(Luogu 5353 树上后缀排序)
key:基数排序
利用 SA 中的基数排序思想,倍增的排序就好了。
Luogu 5353 还需考虑去重
后两题太过诡异,跳过好了。
结业测试
骑士的旅行
一棵 n 个点的树,上面有 m 个 boss
数据范围
key: 树剖 + 线段树
k 很小,故可以线段树暴力维护,复杂度
树的同构
给 m 棵 n 个点的有根树(无根树),判断它们的同构关系。
数据范围
key1:AHU 树的最小表示法(括号序)
每棵树都可以转化成若干个 dfs 括号序列,其中字典序最小的是最小表示法。
定理:最小表示法相同的两棵树同构。
于是直接求最小表示法就好了,复杂度
key2:树 hash
找一种不会被卡的哈希方式,直接比较哈希值就可以了。
复杂度可以做到
一种较好的哈希方式是
c 是常数,随便设一个就行。g 是整数到整数的映射,最好不用多项式,可以用类似 xor shift,xor 完再随机异或一个常数。
糖果
n 行 m 列表格,填 1 ~ k 的数。要求:
- 每行单调不减
- 任意两行不完全相同
问有多少种不同的填写方案,答案模 P 输出(不保证 P 是质数)。
数据范围
key: 插板法 + 组合数取模
只需知道每个数有几个,就可以排出一行的方案,有
于是我们可以使用 D4T2 的方法计算这两个数。
隐身术
给定两个串A,B。请问B中有多少个非空子串和A的编辑距离不超过K?
- 子串:B中连续的一段,不同位置算作多个。
- 编辑距离:把一个串变成另一个串需要的最小操作次数,每次操作可以插入、删除或者替换一个字符。
数据范围
key:SA + 暴搜跳 lcp
枚举起点,每次跳到一个需要修改的位置,结束后记录一下个数。
复杂度只有
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】