2024解题报告
2024.01.02
1.圣诞决斗
算法:博弈论
2.赛道修建
算法:带权并查集+动态规划dp
3.哀
算法:根号分治
已知一个数列,支持两种操作:
-
将所有
的 加上 。 -
查询
很经典的根号分治,对于修改操作对于
-
直接分块暴力加。 -
把每 个看作一个周期,处理周期前缀即可。
时间复杂度
2024.01.04
1.缆车
算法:分块+凸包
有
我们考虑对于两个点形成的一条线段,如果线段的斜率大于射线的斜率,相当于随着
2.鸥
算法:斯特林数
3.卡牌
算法:线段树+树状数组
2024.01.08
1.回归
算法:递推
2.或
算法:并查集
给出
合法情况并不好计算,所以考虑容斥,不合法情况即为在一个二进制位上所以为
但我们又遇到一个问题,如何计算在钦定集合的反集的子集中的数,我们采用高维前缀和计算即可。
3.测测你的字符串哈希
算法:AC自动机
2024.01.10
1.塑料内存条
算法:根号分治
给出
-
在集合
中添加元素 -
将
集合中的所有元素加入 集合中,且后续操作不出现 集合。 -
求集合
和集合 的交集的编号之和。
一道小清新根号分治,发现一二操作用
-
对于
, 集合维护暴力查询即可。 -
对于
,我们需要对于每次加元素暴力维护和其他最多 个大集合之间的答案。
2.冒泡π序
算法:勾股数+莫比乌斯反演
3.测测你的高斯消元
算法:行列式+树形dp
2024.01.14
1.早八
算法:线段树
2.派对
算法:动态规划dp+矩阵加速
3.间谍
算法:凸包
2024.01.15
1.签到题
算法:构造
2.测测你的fft
算法:杨表
3.记忆
算法:线段树/分块+平衡树
2024.01.17
1.因数分解
算法:构造
2.诡意行商
算法:整体二分
3.树上最长上升子序列
算法:点分治+启发式合并
2024.01.19
1.九转大肠
算法:树形dp
2.原本味道
算法:min+矩阵
3.顶级厨师
算法:动态规划dp
2024.01.21
1.郊游
算法:01trie
2.雪仗
算法:多源最短路
3.闪耀
算法:根号分治
2024.01.22
1.虚化
算法:万能欧几里得
2.灵能潮汐
算法:递归+动态规划dp
3.优雅队列
算法:凸包
2024.01.24
1.桜花抄
算法:园方树
2.コスモナウト
算法:HALL定理+线段树
3.秒速5センチメートル
算法:容斥+卷积
2024.01.28
1.游戏
算法:博弈论+线段树
给出一个
实现以下两种操作:
- 给定
个区间转换为 个序列, 和 轮流操作,先无法操作者输。 - 对区间
取反。
首先从博弈出发,发现在一个序列中只有选到的位置在正中心时,才会删除本身,否则只会删掉数的数量较多的一边。所以对于每个合法位置一直操作只会使左右平衡最后消失,发现每个序列最左边的
2.连通
算法:高位差分
3.C位
算法:线段树分治+递推
2024.02.16
1.寄
算法:树形dp
2.摆
算法:杜教筛
3.润
算法:容斥+卷积
2024.02.17
1.函数疆土
算法:基环树+动态规划dp
2.真夏飞焰
算法:后缀数组SA
3.随机树生成器
算法:生成树
2024.02.19
1.众数
算法:Set+启发式合并
2.火柴
算法:边双
3.疑问
算法:动态规划dp
2024.02.20
1.送信
算法:计数
2.饺子
算法:树状数组+Hash
3.机关
算法:递推
2024.02.22
1.十
算法:线段树
2.二十
算法:旋转卡壳
3.七十
算法:带状高斯消元
2024.02.23
1.圣诞树
算法:动态规划dp
2.过河
算法:二分图
初始有
发现第一次一定会运走一头所有三元组都有的猪,然后我们将剩下的二元组两两连边,那么每次带去对岸的猪不能与对岸的猪有边,但我们发现带过去一条有边的猪后,会将先前的一头“万能猪”带回去,再带一头猪到对岸,此时两边的猪所连的边一定构成二分图!
此时问题就化简成了:一张图删掉两个点是否能成为二分图,两个点显然是不好处理的,我们先枚举一个点,于是就需要一种判断删一个点是否能成为二分图的方法:
通常判断一个图是否是二分图我们会使用
整理条件后为:
- 合法点必须在奇环的交集中。
- 合法点不能被来自同一子树的奇环和偶环覆盖。
具体维护细节为我们记
对于一条
if ((dep[u] - dep[v]) & 1) f[u] = Min(f[u], dep[v]);
else g[u] = Min(g[u], dep[v]);
对于一个点
if (f[v] < dep[x] && g[v] < dep[x]) cant[x]=1;
最后这道题就成了一道板子啦!时间复杂度
3.点对游戏
算法:点分治
2024.02.25
1.签到
算法:容斥
2.数据结构
算法:带权重心
3.爆搜
算法:状压dp
2024.02.26
1.博弈
算法:博弈论+动态规划dp
2.排列
算法:模型转化+动态规划dp
给定一个
神仙思路题!首先阶乘暴力显然无法接受,于是我们需要分析这个满足条件的排列的一些性质。发现
接下来我们将每个二元组
这时候一个难题扑面而来,图的量级是
3.子段和
算法:线段树
2024.02.28
1.鸭棋
算法:模拟
2.激光切割机
算法:凸包+树状数组
3.散步
算法:动态规划dp
2024.02.29
1.A
算法:最小割
2.B
算法:动态规划dp
3.C
算法:扩展欧拉定理+线段树
2024.03.03
1.选拔士兵
算法:线段树+单调栈
给出两个长度分别为
我们发现最简单的情况即为全选其中一个序列,所以我们的方案要更优的话,需要至少一个序列选的区间权值和为当前序列的一半以上,于是我们找到一个前缀和刚好大于
这时我们在
2.草
算法:点分治+分讨
3.集结
算法:欧几里得坐标+切比雪夫坐标
给出
非常的巧妙,我们将原本的欧几里得坐标转换为切比雪夫坐标,此时
2024.03.05
1.跳!跳!跳!
算法:状态压缩+并查集
2.翻!翻!翻!
算法:构造
3.卷!卷!卷!
算法:生成函数+分块
2024.03.07
1.game
算法:线段树
2.count
算法:组合数学+动态规划dp
3.ciallo
算法:线性基
给出
选若干个权求亦或可行值/k大值是线性基的常规操作,考虑将小于
对于树上一个点的线性基我们考虑分两部分维护,子树内和子树外,子树内是好处理,从下往上合并即可,重要的是子树外的部分该如何处理,于是我们看每次向子树移动需要做什么,因为需要处理完子树
-
将当前点
的权值加入线性基。 -
将
对于 的前缀子树加入线性基。 -
将
对于 的后缀子树加入线性基。
具体操作如下图:
将这三部分加入以后即可对于每个点维护全图的线性基,因为我们有小于和大于两部分,所以每个点实际维护了两个线性基,因为他们的
最终的时间复杂度为
2024.03.10
1.采购蔬菜
算法:背包+k短路
2.随机逆序对
算法:分类讨论
3.游戏
算法:定期重构
给出
一个比较好想的暴力是给线段树的每一个节点维护一个
发现唯一不能接受的复杂度就是
2024.03.12
1.放进去
算法:高维前缀和
2.生成树传说
算法:贪心
3.前置知识
算法:贪心
2024.03.14
1.液晶显示器
算法:迪利克雷生成函数+杜教筛
2.军用交换机
算法:虚树+链表
3.迷雾
算法:动态规划dp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现