05 2023 档案
[AGC012C]
摘要:[AGC012C] Tautonym Puzzle 本题考查增量构造。具体而言如下递归构造 (假设它需要的递归已经构造好): 当 为奇数时,可以先构造 ,然后在中部和尾部添加一个新的数。由于新的数可以接在原来任意一个子序列后,所以 \(\
[ABC302G]
摘要:# [[ABC302G] Sort from 1 to 4](https://www.luogu.com.cn/problem/AT_abc302_g) 一道简单的性质分析题。 考虑到这个数列只有 的数,就可以考虑有哪几种交换方案。 我们先统计出 表示应该填 $i
[ABC302F]MergeSet
摘要:# [AGC010B Boxes](https://www.luogu.com.cn/problem/AT_abc302_f) 这道题其实是一道 `01BFS` 求最短路的模型,但是建模比较难想。 首先需要想到对于每个集合内的点两两连边,边权为 ,由于开始和结束时需要从起点到中转点和中转点到终
[AGC010B]Boxes
摘要:# [AGC010B Boxes](https://www.luogu.com.cn/problem/AT_agc010_b) 先将题目转换成正着的,即由全 变为给定的序列。操作次数为 。条件 必定是整数很显然。 这
CF1754C2
摘要:题目 这道题与 C1 相比就多了 ,所以做法是几乎一致的。 C1 是有 为奇数无解,但这道题需要统计一下非 数的个数根据这个判断是否有解。 然后就是相邻两个非 数之间的关系了。如果这个两个数符号相同,那么把它们中间的最后一个 给后者,然后其他 浪费掉,前
CF1754C1
摘要:题目 首先,如果有奇数个数,那么正负 肯定不能完全抵消,无解。 如果有偶数个数,必定有解,构造方案: 对于每两个位置,如果相同,将这两个数划分为 组。 否则,将两个数各划分为 组。 这样,对于第一种,这个区间是 ,对于第二种,这两个区间的和是 ,显然符合题意。 #
回文
摘要:[CSP-S 2021] 回文 首先考虑爆搜。我们可以先确定 的第一个位置和最后一个位置,然后将数列放入两个队列中。 4 1 2 4 5 3 1 2 3 5 这是样例,首先最优的情况当然是第一个位置和最后一个位置都取 L,即 。 两个队列分别是 和 $q2=[5,
动物园
摘要:动物园 这道题的背景有些牵强,其实 完全没有用。 首先,如果《饲养指南》中提到的规则在动物园已有的动物中存在,那么这种饲料一定会购买,那么就可以养 位为 都可以。但是如果动物园已有的动物中不存在,那么如果新动物 必定是要买新的饲料,那么不符合题意。
和积和
摘要:# [和积和](https://www.luogu.com.cn/problem/P5686) 这道题侧重于考察**数学功底**。 首先,前缀和优化一般都是能想到的,但是这样的复杂度是 。 考虑对于小的情况进行模拟。 设 表示 ,$s
格雷码
摘要:格雷码 这道题考的有点偏,主要侧重于数学。考虑格雷码的构造方案是分成两部分,前面一部分正序,后面一部分倒序,所以可以使用二分来求解。具体的,我模拟了一下,找了找规律。 2 3 这组样例看不出什么,先分成前后两半,发现 在最后,所以就改成按照 10 (在前一半输出 1,后一半输出 0)的顺序了
日期
摘要:日期 这道题比较水,但还是十分值得深思的,有点像数学里的分类讨论问题。 日期为 月份为 无需修改。 月份为 改 次(都改成 月)。 除掉以上合法的月份,当个位为 时,修改十位不能达到目的。 其他情
廊桥分配
摘要:# [廊桥分配](https://www.luogu.com.cn/problem/P7913) 国内国际是完全独立的,可以分开考虑。 发现如果每次我们让新来的航班强制使用当前编号最小的空闲廊桥,那么对于一个给定的 ,停靠到编号 的就是在只有 个廊桥时无法使用到廊桥的航
假期计划
摘要:# [假期计划](https://www.luogu.com.cn/problem/P8817) 由于要考虑相邻城市之间的中转点不超过 (即所经过边数不超过 ),所以首先要预处理出 ,即两两之间的点的距离,可以 `bfs` 次解决。然后就是考虑怎么进行枚
字串变换
摘要:字串变换 这道题用双向广搜会比单向快得多(设每次扩展是 个,则就是 二者的差距)。但是还是可以被卡掉的。而且双向广搜还需要注意,每次必须扩展一层。如下图,如果两边同时扩展一个点,那么图中左边的情况有一个中间点,而后面的搜索没有中间点,那么答案就会比最优解大
导弹防御系统
摘要:# [传送门](https://www.acwing.com/problem/content/description/189/) 这道题与 [拦截导弹](https://www.cnblogs.com/wscqwq/p/17416716.html) 类似,就是需要套一个爆搜,由于 很小,所以
拦截导弹
摘要:#[拦截导弹](https://www.acwing.com/problem/content/description/1012/) 贪心策略如下所示:图一表示具体做法,图二表示证明 。然后转移的话可以从上一列的许多状态中转移,但是需要满足两个条件 保证当前状态和
靶形数独
摘要:这道题与 数独 几乎完全相同,只是需要计算靶形得分,可以直接使用一个 的矩阵,如下代码 #include<bits/stdc++.h> using namespace std; const int num[9][9]={ {6,6,6,6,6,6,6,6,6}, {6,7,7
回转游戏
摘要:排书 此题使用 解决。首先是一个迭代加深的 dfs,然后判断条件里是类似于 的条件,如果当前的估价 当前的实际花费 答案就可以返回了。 这里比较显然,无需证明,比 的证明简单。 考虑统计中间八个格子中的众数 。由于每次最多移入一个数,移出一
排书
摘要:排书 此题使用 解决。首先是一个迭代加深的 dfs,然后判断条件里是类似于 的条件,如果当前的估价 当前的实际花费 答案就可以返回了。 这里比较显然,无需证明,比 的证明简单。 考虑每次都会更改如上图所示的三个数的后继关系,所以每次最多消除 $3
blog
摘要:k短路 这道题考察的还是 算法。 首先考虑设立估价函数:当前点到终点的最短路(因为从当前点到终点的所有路径中最短路最短,一定满足 )。只需要在反向图上做一遍 dijkstra 就能求得。 然后考虑证明第 次弹出的就是第 短路。类似 中的证明。 #incl
my
摘要:八数码问题 算法例题。 首先判断是否有解。这里有一个条件:将八数码转化为序列后如果逆序对数为偶数,一定有解,否则一定无解。 充分性难证明,只证明必要性:只要是有解必定是偶数。 行内移动序列没有变,数量不变。 如果上下移动发现逆序对变化是 。 而答案序列逆序对为 ,为偶
A∗算法
摘要: 算法 这个算法其实就是 dijkstra 的变种,是对于一般的 bfs 的一种优化手段。 首先需要设置一个东西叫做估价函数。普通的 bfs 的估价函数一般取 。这个东西如果你要保证一定正确,记起点到当前点的距离为 ,到末尾的真实距离为 ,设你的估价函数是 $f
字典树的空间消耗问题
摘要:字典树最多构建节点个数计算 给定 ,然后随机 个长度为 的 01 串,求所有情况下将这 个串构建成字典树中节点数最多可能有几个。注意,构建方式是扫描每个串,注意是从这个串第一个字符到最后一个,依次加入字典树。说人话:基本构建方式。 如图, 时,节点