10 2021 档案
P1438 无聊的数列 题解
摘要:Description 洛谷传送门 Solution 很明显的一道线段树维护区间题目。 查看一下标签不难发现,可以用差分来维护。 具体来说,对于操作 1。 我们给 l 加上 K。 l + 1 ~ r 加上 D(两个数之间的差)。 r+1 减去 \(
CF620E New Year Tree 题解
摘要:Description 洛谷传送门 Solution 本题要不难想到要用线段树或树状数组之类的数据结构,但是题目要求在树上操作,我们该如何处理呢? 首先我们要用到一个叫dfs序的概念。其实并不难,刚接触的同学不要被它吓到,它本质上就是一棵树的先序遍历,所谓先序遍历就是先遍历根,然后遍历左子节点,最后
结构体优先队列的定义
摘要:前言 蒟蒻在定义优先队列时,经常忘记重载运算符之后优先队列该定义大根堆还是小根堆。 每次都得试一下 QwQ。 所以写一篇博客来记录一下,以后就不用试了。 正文 普通的优先队列有两种定义方法。 大根堆(默认): priority_queue <int> q; 小根堆: priority_que
CF464E The Classic Problem 题解
摘要:Description 洛谷传送门 Solution emm……这是我为数不多的黑题之一,所以来写篇博客记录一下。 我们发现边权过大,只能用高精度来算,但是这样的复杂度太劣了,无法通过此题。 观察到边权只能是 2x,所以我们可以给它压成二进制数,然后跑最短路时单点加。 我们再来考虑一下 \
CF427C Checkposts
摘要:Description 洛谷传送门 Solution 首先吐槽一句:不知道这题是怎么评到紫的。 观察题意: 如果有一个检查站在 i 路口,保护 j 的条件是:i==j 或者警察巡逻车可以从 i 走到 j,并且能回到 i。 这不就是让我们求强连通分量吗?
CF161D Distance in Tree 题解
摘要:Description 洛谷传送门 Solution 似乎各种做法都可以过,这里提供一篇 dsu on tree (树上启发式合并)的题解。 不会的同学可以看我的博客 浅谈 dsu on tree 题目要求我们求出长度为 k 的路径有多少条。 那么我们可以开一个桶 \(cnt_x
P4375 [USACO18OPEN]Out of Sorts G 题解
摘要:Description 洛谷传送门 Solution 一道很巧妙的结论题。 我们观察到题目中是一个双向冒泡排序。然后问你要进行多少轮才能排好序。 我们首先对于原数组进行离散化。 考虑冒泡排序的过程(假设当前数组未排好序): 第一次:找出一个最大值放到最后面。 对于位置 x,冒泡之后一定有一个
P3750 [六省联考2017]分手是祝愿 题解
摘要:Description 洛谷传送门 Solution 这道题 CSP 前就计划着做来着,结果一直咕咕咕了,现在来补一下吧。 当时点开这道题主要是被题目吸引进来的,结果发现出题人是标题党,差评! 好吧,下面我们在来分析一下这道题。 我们首先考虑最优情况,其实这个是比较好想的。 不难发现,点击编
CSP2021 爆零记
摘要:Day -1 大晚上的在机房颓废时,教练突然进来。 曰:“现在疫情又有反复,大家把核酸证明什么的都上传好,去秦皇岛也带上,多带点口罩和酒精湿巾,在火车上一直戴着口罩,向 fzj 学习,口罩不离嘴。” sto 房神 orz,真·防疫好少年。 然后教练继续曰:“到时候还要查健康码,大家能
CSP 前模板记录(黄题篇)
摘要:快要 CSP 了,还是啥都不会。 赶紧打几个板子复习一下,让自己认识到自己有多渣然后好好努力吧。 P1886 滑动窗口 /【模板】单调队列 #include <iostream> #include <cstdio> #include <cstring> using namespace std
2021.10.20CSP模拟模拟赛 赛后总结
摘要:意想不到的骗分…… 首先开 T1,怎么又是算期望的……不会……先跳过。 开 T2,emm……似乎是一道 dp, 套路的设出 dp[i][j] (分别表示前 i 和前 j 个字符)状态,然后用 KMP 优化一下? 但是不会转移方程,先跳过。 开
2021.10.17CSP模拟赛 赛后总结
摘要:这一场个人感觉考得还是很不错的,至少能拿的分都拿了。 A. [SCOI2009]生日快乐 乍一看以为是一道数学题,然后看到下面的数据范围:1≤N≤10。 突然发现写个爆搜就可以了(其实还是想了很长时间 QwQ)。 我们存 3 个变量 dfs(x,y,k) 表示
2021.10.16CSP模拟赛22 赛后总结
摘要:A. 区间 这题似乎用 ST 表,单调栈等各种方法都可以过。 我用的是无脑线段树(智商不够,数据结构来凑)。 简单来说,维护一下区间最小值及其位置即可,然后递归输出。 直接贴代码吧。 这个 pushup 好像不能写三目运算符(不知道为什么),大样例一直过不去,然后调了半天 \(QwQ
好玩的 & 好用的
摘要:\(\small\texttt{本}\huge\texttt{人}_{\small\texttt{的}^{\large\texttt{萌新}\small\texttt{QAQ}}}^{\large\texttt{是}{\small\texttt{刚学}\large\texttt{OI}}}\huge
洛谷 P2061 [USACO07OPEN]City Horizon S
摘要:Description 洛谷传送门 Solution 我们发现我们是无法快速判断一个区间内我们需要修改哪些数,不需要修改哪些数的。同时我们观察到整个区间初始全为 0. 所以我们考虑对询问进行排序,按修改高度从低到高排序。 排完序后,我们对于每一个操作就相当于进行区间修改了(现在区间内的数一定小于等于
洛谷 P1533 可怜的狗狗
摘要:Description 洛谷传送门 Solution 这道题似乎能用很多种方法来做,我用的 fhq−treap。 本来我想的是维护两只平衡树,一个用来找区间,另一个来找区间最大值。 想了一会发现想假了。这样做完全不对。 于是去题解区看了一眼题解,发现似乎可以用莫队来做,但是没找到 \(fhq
洛谷 P1471 方差
摘要:Description 洛谷传送门 Solution 一道非常经典的线段树问题,下面我们来分析一下。 题目要求我们支持区间加,求区间平均值,求区间方差。 区间加和区间平均值都很简单,唯独这个区间方差要如何维护呢? 我们先来看一下方差的式子: len=r−l+1 \(S^2 = \
洛谷 P6327 区间加区间sin和
摘要:Description 洛谷传送门 似乎是一道前 Ynoi,不过反正现在不是了。 Solution 题目名字已经暗示我们要使用线段树之类的数据结构了。 看一眼题面,好吧,就是线段树维护。 本题需要一点数学基础。 \(sin(a + b) = sin(a) * cos(b) + cos(a)
友链
摘要:写在前面,要互换友链的话: 1.私信发给我头像图片链接(图片大小为128∗128)。 2.私信发给我博客地址。 3.友链均按时间顺序排列。 同校Dalao Shukuang \({\color{Red}{Acesta
SP8093 JZPGYZ - Sevenk Love Oimaster
摘要:Description 给定 n 个模板串,以及 m 个查询串。 依次查询每一个查询串是多少个模板串的子串。 洛谷传送门 Solution 发现题解区好多用 SAM 的,这里提供一篇AC自动机做法的题解。 我们先对询问串建AC自动机,然后计算每一个文本串对每一个询问串的贡献。 那么这
洛谷 P2824 [HEOI2016/TJOI2016]排序
摘要:Description 洛谷传送门 Solution 一眼就能想到线段树,但是线段树似乎也无法维护啊?那怎么做? 于是我们查看标签…… 发现……二分答案?这怎么二分答案?? 于是我们再回想一下题目要求计算什么:位置是 q 的数是多少。 而且只有一次询问。 既然是二分答案,那我们就二分呗。 假
#3790. 神奇项链 题解
摘要:Description bzoj 上的题,黑暗爆炸OJ传送门 Solution 是一道 manacher 算法的应用题。 首先转换一下题意:给定一个字符串,让我们求最少的回文串个数去覆盖它。 所以先跑一遍 manacher,求出每个回文串的左右边界,存到一个数组里。此时这道题
洛谷 P4768 [NOI2018] 归程
摘要:Description 洛谷传送门 Solution Kruskal 重构树好题。 我们先按照水位 a,建 Kruskal 重构树。具体来讲:按水位从高到低排序,每次选出剩余边中水位最高的一条边插入到树中,这样就建成了一个小根堆。 然后我们再来考虑询问。 对于一个水位线 \(
CF812C Sagheer and Nubian Market
摘要:Description 洛谷传送门 Solution 注意到题目要求我们计算出最多能买多少个纪念品,所以容易想到二分。 我们二分最多能买多少个纪念品,把每个纪念品的实际花费计算出来,从小到大排个序,取出前 mid 个,判断花费是否合法即可。 Code #include <iostream>
洛谷 P3773 [CTSC2017]吉夫特
摘要:Description 洛谷传送门 Solution 一道卢卡斯定理的变形。 先来看卢卡斯定理: Cnmmod P=Cn mod Pm mod P∗Cm/Pn/Pmod P 在来看这道题目,题目要求我们最后的积为奇数,我们可以对于 \
Loj #6284. 数列分块入门 8
摘要:Description Loj传送门 Solution 个人认为是 Loj 上这几道分块题中比较好的一道题。 对于这道题,我们对于每一块打一个 lazy 标记,表示当前块是否被完整赋过值,即全部赋值为 c。 修改时,整块的直接修改 lazy 标记,两头多余的部分暴力修
洛谷 P4571 [JSOI2009]瓶子和燃料
摘要:Description 洛谷传送门 Solution 一道裴蜀定理应用的题目。 裴蜀定理: 一定存在一组整数解使得 ax+by=gcd(a,b) 成立。 这里不再证明了,感兴趣的同学可以自行百度。 再来看这道题,假设只有两个瓶子,里面有燃料,可以来回倒。 那么不就是 \(ax +
洛谷 P1379 八数码难题
摘要:Description 洛谷传送门 Solution 似乎各种做法都可以过,我写的 IDA∗。 很明显,乐观估价函数即为当前棋盘与目标棋盘上不同的数字个数。 所以直接枚举深搜层数,然后搜索即可。 IDA∗ 的主要难度就在乐观估价函数上,这个弄明白之后,就很简单了。 然后这个写法上
SP11469 SUBSET - Balanced Cow Subsets
摘要:Description 洛谷传送门 Solution 又是一道折半搜索题。 我们还是枚举一半的数,记录每一种情况的和。 然后爆搜另一半,当和为 S 时,判断前一半是否可以凑出 S,如果可以,打个标记即可。 两次凑出 S 时,可能会有重复选用的数组,但其实不用管。 考虑到重复的
洛谷 P3067 [USACO12OPEN]Balanced Cow Subsets G
摘要:Description P3067 [USACO12OPEN]Balanced Cow Subsets G Solution 又是一道折半搜索题。 我们还是枚举一半的数,记录每一种情况的和。 然后爆搜另一半,当和为 S 时,判断前一半是否可以凑出 S,如果可以,打个标记即可。 两次凑
洛谷 P1731 [NOI1999] 生日蛋糕
摘要:Description P1731 [NOI1999] 生日蛋糕 Solution 明显的就是搜索(但是我一点都不会写,我好蒻啊)。 首先一定是从下往上搜,如果从上往下的话就没有上界了,容易一搜到底。 然后再考虑这么几个优化: 当前体积 > n,返回。 当前层数 > m,返回
CF521D Shop
摘要:Description 洛谷传送门 Solution 一道非常友好毒瘤的贪心题。 前置:本文与题目中变量名不同,本文:有 n 个正整数,m 个操作,选 k 个。 题目中要求 3 种操作。 把 ai 赋值为 b; 把 ai 加上 b; 把 \
洛谷 P4799 [CEOI2015 Day2]世界冰球锦标赛
摘要:Description P4799 [CEOI2015 Day2]世界冰球锦标赛 Solution 折半搜索好题。 发现到 n≤220 时,可以直接爆搜出答案,而数据范围是 n≤240,所以我们考虑折半搜索。 具体来说,把前 20 场和后 20
洛谷 P5377 [THUPC2019]鸽鸽的分割
摘要:Description 洛谷传送门 Solution 手摸一下前几个数,1,2,4,8,16…… 嗯,好!稳了!2n−1,交一发,全 WA! 在推一下 n=6,等于 31!!! 于是我重新思考一下。 假设 n 条线不相交,那么每增加一条线会多一个
洛谷 P1080 [NOIP2012 提高组] 国王游戏
摘要:Descrption 洛谷传送门 Solution 一道非常好的贪心题。 我们只考虑国王以及两个大臣,编号依次为 1,2,3 左手分别写着 a1,a2,a3,右手上分别写着 b1,b2,b3。 对于 2 在前还是 3 在前分别考虑: 1 -
洛谷 P4370 [Code+#4]组合数问题2
摘要:Description 洛谷传送门 Solution 是P4369 [Code+#4]组合数问题这道题的加强版……好吧,两道题并没有什么关系。 考虑到 Cmn>Cmn−1,所以我们先把 C1n 放到一个大根堆中,然后每次取出最大的 Cyx,把 \(
洛谷 P4369 [Code+#4]组合数问题
摘要:Description 洛谷传送门 Solution 好吧,不要被吓到了,只是一道黄牌题。 题目要求输出任意一组解,所以瞎写就完事了。 考虑构造 k−1 个 1,和 1 个 n−k+1。 那么答案就是 \(ans = \sum\limits_{i=1}^{k - 1} C
洛谷 P3311 [SDOI2014] 数数
摘要:Description 洛谷传送门 Solution 看起来像是一道数位 dp。 但是怎么做呢?我们可以联想到文本生成器那道题。 这道题的思路也差不太多,就是在 AC 自动机上跑 dp。 那么如何判断一个数是否出现过集合 s 中的字符串呢? 这个也很简单,我们建 \(
洛谷 P3413 SAC#1 - 萌数
摘要:Description 洛谷传送门 Solution 典型的数位dp。 题目要求求区间 [l,r] 内有多少个数至少有长度为 2 的回文串。 不难发现,我们只需要考虑长度为 2 或 3 的回文串即可。 所以我们记忆化搜索时,存一下当前数的前一个数,和前前个数,判断一下即可。 具体看代码吧,
洛谷 P3521 [POI2011]ROT-Tree Rotations
摘要:Description 洛谷传送门 Solution 线段树合并 显然,两棵树的交换与他们的子树无关,所以从下往上处理即可。 我们考虑对于每个子节点建一只权值线段树。然后不断向上合并。 注意:每个点都是一只完整的权值线段树,也就是说左子树权值小于右子树权值。 所以逆序对个数就很明显了。 不交换: \
洛谷 P4926 [1007]倍杀测量者
摘要:Description 洛谷传送门 Solution 一道差分约束好题。 题目要求我们输出最大的 T 使得至少有一个人女装。 那么容易想到二分答案。 所以这道题就很明显了,二分答案套差分约束,判断是否符合条件。 再来看如何建图。 对于 CA>CB∗k,我们从 B
洛谷 P5154 数列游戏
摘要:Description 洛谷传送门 Solution 明显的区间dp 根据套路,设计状态: f[i][j] 表示,删去区间 [i,j] 之间的数,能得到的最大得分。 但是我们发现,这个并不好转移,我们无法记录是否都能被删除。 所以我们转换一下思路。 设 f[i][j] 表示
CF718C Sasha and Array
摘要:Description 洛谷传送门 Solution 转移方程就是斐波那契数列求和,题目里也都给了。 矩阵也比较基础吧,不写了。 但是这道题需要用到线段树维护矩阵乘法。 听着挺吓人的,其实也没有多难。 我们首先建一棵矩阵类型的线段树。 然后 build 为初始输入的斐波那契数(即 \(f^{
『学习笔记』 dsu on tree
摘要:前置芝士 重链剖分(最好是熟练掌握) 莫队(大概了解即可,有一点相似的思想) dfs序(可有可无,主要是为了加速,其实我就没写过 QwQ) 主要思想 dsu on tree 又名树上启发式合并 (其实是非常暴力的一个东西。) 用途 可处理树上的一些统计类型的问题。 如: 求子树中
洛谷 P5336 [THUSC2016]成绩单
摘要:Description 洛谷传送门 Solution 区间dp 状态定义 根据套路,我们定义 dp[i][j] 表示取走区间 [i,j] 的最小花费。 但是只有区间范围似乎并不好转移,因为我们也不知道区间最大值以及最小值是多少。 所以我们再定义一个 \(f[i][j][x][y]\