随笔分类 - 题解
摘要:这是一篇测试文章,请审核管理直接将其跳过 中文English 中文 English
阅读全文
摘要:滥用一下职权,写点 C++20 加的好东西。 std::basic_string::end_with 方法,用于检查字符串是否以给定的内容为后缀。“给定的内容”可以是单个 char,C-style 字符串或 std::string。 因此: string s; cin >> s; cout << (
阅读全文
摘要:赛时魔怔了,这没瞪出来! 很容易想到,对着答案二分,检查每个工序的效率大于等于 mid 时所需的最少钱数之和是否小于等于 X。 在决定每条生产线需要哪些机器时,从贪心的角度考虑,应该多选一些性价比更高的机器,性价比低的机器使用量应该较小。感性理解一下,性价比低的机器绝对不会选太多。卡着数据范围选一个
阅读全文
摘要:我来教大家如何打暴力。 首先,根据题面,假设我们当前要修改第 i 个数。如果两个区间都包含 i,此时无论做何修改差都不变,都不包含同理。因此,我们找的两个区间应为:其中一个包含第 i 项,而另一个不含。 由于 n 非常小,我想到将所有符合条件的区间和都存下来,这个过程预处理出来或者套个前缀和都可以。
阅读全文
摘要:从来没见过同余最短路,确实有点意思的。此类题关键在于,其中某个元素的范围很小,我们需要以此为切入点解决。方便起见,我们从 0 开始出发,存在的最后一个楼层为 h−1。 对于任何一个能到达的数,可以继续乘坐跳楼机上升 x 层若干次。因此可以发现,设有 a≡b(modx),其中 a≤b,若可以到达 a,
阅读全文
摘要:按 11 个每块分组,共分了 90 组,还余 10 个之后处理。每个组内询问相邻的点对,这样一个组需要询问 10 次,共 900 次。 由于只有 10 个坏点,那么若一组 11 个全部相等则说明这 11 个都是好的。我们记下已知的任意一个好点。否则,这一组内至少有一个坏点,留下备用。最多只有 10
阅读全文
摘要:这个真不值 2000 吧! 经典线性 dp。考虑 fk,i,j 表示第 k 轮时当前玩家选择 (i,j) 是否可以获胜。 第 l+1 轮时该选手将直接失败,因此 fl+1 全部初始化为 false。 然后倒着从后往前转移。考虑 fk,i,j,如果下一轮的选手下在右下方的任意一点可以获胜,则下在
阅读全文
摘要:在树上考虑 dp。 对于每个节点,dp 数组保存两个信息。设当前位于点 p,fp,0 表示必须选择 p 的方案数,fp,1 表示必须不选当前点且至少选了一点的方案数。 然后是转移。 如果不选择第 p 个点,分两种情况: 选择了若干个相同颜色的子节点。对于若干个颜色相同的节点,每个节点都可以选择选
阅读全文
摘要:线段树优化 dp 的好题啊!方便起见,题解中点的编号从 0 开始。 首先,很显然易见的是,只要在某个时刻 Elsie 的位置严格大于 Bessie 所在的位置,那么 Elsie 就可以获胜。因此,我们希望求出到所有点的最短距离。这是一张 DAG,这启发我们往动态规划的方向思考。 在初始时,Bessi
阅读全文
摘要:CF 的题还是一如既往的好玩! 题目要求我们执行 n−1 次操作。对于第 x 次操作(1≤x≤n−1),可以选择一对 (u,v) 满足 x∣(∣au−av∣),在点 u 与点 v 之间建边。执行所有操作后,所得到的图应为一颗树。 方便起见,将 x∣(∣au−av∣) 转化为 au≡av(
阅读全文
摘要:n≤20,我们可以轻易地枚举中间没有插入符号的空位。每次枚举可以确定一个数列。若数列中存在 0,则显然全部乘起来答案最优(为 0)。否则,剩下的数都是正整数。设 b 为任意正整数,则当 a=1 时保证有 ab≤a+b。考虑在其他位置全部插入加号,在 1 的左侧或右侧插入乘号,将它乘进两边,就可以使总
阅读全文
摘要:少转一个 int128 痛失一题 Hint 1. 如果确定了一个正整数 n 和一个从 b 到 z 的字符 c,最多有多少个符合题目要求的 s 的子串 t 满足 ∣t∣=n 且 t0=c? 显然只有一种。假设有两个,那一个肯定会与另一个失配。这启示我们,可以按照首字母分类,对于每个 b 到 z 的首
阅读全文
摘要:本题的最佳移动策略为: 将 PA 与 PB 移动到一起(或间隔一条边)。记 PA 当前所在的点为起点。 PA 与 PB 从起点一起(或 PB 追逐 PA)遍历整棵树。由于 PB 与 PA 基本同步移动,我们只考虑 PA 移动的步数。此时,每一条边都需要走 2 次,共 2(n−1)
阅读全文
摘要:大家好,我是 STL 带师。 按行和列维护两个 map 套 set。 剪掉某个部分时,在对应 map 中二分出要删除的区间。遍历即将删除的内容,在另一个 map 中同步删除。 #include <bits/extc++.h> using namespace std; namespace pbds =
阅读全文
摘要:若无特殊说明,下标默认从 0 开始标号。 优先队列优化太好玩了! 建议先完成:P1631, UVA11997。 容易设计线性 DP 状态:fi 表示考虑仅前 i 个数时,所有方案权值从大到小排序的数组。对于初始状态 f0,仅有填涂 [0,0](权值为 a0,0)与什么都不画(权值为 0)两种情
阅读全文
摘要:来点依靠注意力的解法。 很容易写出一份暴力程序。打开一个 python 交互式终端,写一份打表程序: In [1]: from math import gcd In [2]: def f(n,m): ...: for i in range(1,n+1): ...: for j in range(1,
阅读全文
摘要:续 上题题解。 这一次用到 T1 提供的 IP 和 MAC 地址了!快快用 map 存下来方便查找: template<typename T,size_t n> const auto array_hash=[](std::array<T,n> const& f){ return std::_Hash
阅读全文
摘要:让我们在 上一题的基础上 继续扩充。 首先,实践发现使用 operator>> 从输入流中获取文件的方法并不是非常好用。我将上一题的四个结构体添加了构造函数: struct pcap_hdr { // 所有字段都是大端序 uint32_t magic_number;// 用于文件类型识别,始终为 0
阅读全文
摘要:既然是工程题,那就尽量让程序良构起来吧! 我们按照手册所说定义两个结构体: struct pcap_hdr { // 所有字段都是大端序 uint32_t magic_number;// 用于文件类型识别,始终为 0xA1B2C3D4, uint16_t version_major;// 始终为 2
阅读全文
摘要:三个矩形之间的相对位置可以用这两种情况概括,其他的所有情况都可以由原矩阵旋转而得: 在此之前,我们先将 bx,y=∑i=xx+k−1∑j=yy+k−1ai,j (x≤n−k+1,y≤n−k+1) 用二维前缀和预处理出来。时间复杂度 O(n2)。 先来看求第一种情况。先预处理求任意两行之间的最
阅读全文