
平日练习
文章平均质量分 57
。。。。
Cosmic_Tree
什么时候才能像杨大佬一样强啊(´;︵;`)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
P4113 [HEOI2012]采花 ( 树状数组 + 离线 )
题目链接:点击进入题目思路跟此题相似:HH的项链对于若干个询问的区间 [ l , r ] ,如果他们的 r 都相等的话,那么对于数组中出现的同一个数字,因为要求只有每个数出现至少两次才可以计入答案,那么我们只需要关心出现在最右边的第二个的即可。( r 固定情况下,只需要看 l 与这第二个的大小关系来判断这个数可不可以计入答案 )对 [ 1 , r ] 保留所有数离 r 第二近的那个,剩下的扔掉。那么此时求前缀和 sum , sum [ r ] 就是 [ 1 , r ] 的不同颜色的数量,那么原创 2021-08-18 21:19:25 · 307 阅读 · 0 评论 -
POJ - 3764 - The xor-longest Path ( 01字典树 + 异或前缀和 )
题目链接:点击进入题目题意找出树上任意不同两点间最大的路径边权的异或值。思路假设 sum [ x ] 表示根节点到 x 路径上所有边权的 xor 值,显然有:sum [ x ] = sum [ father ( x ) ] xor weight ( x , father ( x ) )根据上式,我们可以对树进行一次深度优先遍历,求出所有的 sum [ x ] 。不难发现,树上 x 到 y 的路径上所有边权的 xor 结果就等于 sum [ x ] xor sum [ y ] 。这是因为根据原创 2021-08-18 21:18:36 · 314 阅读 · 0 评论 -
HDU - 4825 - Xor Sum( 01字典树 )
题目链接:点击进入题目思路01trie经典应用,求异或最值。trie 树中存储 a [ 1 ] ~ a [ n ] 对应的 32 位二进制串,查询时,根据“尽量走相反的字符指针”的检索策略,就可以找到所求答案。代码// Problem: Xor Sum// Contest: Virtual Judge - HDU// URL: https://vjudge.net/problem/HDU-4825// Memory Limit: 132 MB// Time Limit: 1000 ms原创 2021-08-18 21:18:16 · 249 阅读 · 0 评论 -
LibreOJ - 10050 - The XOR Largest Pair( 01字典树 )
题目链接:点击进入原创 2021-08-18 21:17:52 · 215 阅读 · 0 评论 -
P3865 【模板】ST 表
题目链接:点击进入题目思路ST 表是解决 RMQ 问题 ( 区间最值问题 ) 的一种强有力的工具O ( n log n ) 预处理,O ( 1 ) 查询最值maxx [ i ] [ j ] 表示,从 i 位置开始的 2j2^j2j 个数中的最大值,也就是 a [ i ] ~ a [ i + 2 ^ j - 1 ] 中的最大值初始化 maxx [ i ] [ 0 ] = a [ i ]转移方程 maxx [ i ] [ j ] = max ( maxx [ i ] [ j - 1] , max原创 2021-08-12 21:50:02 · 289 阅读 · 0 评论 -
P2251 - 质量检测( ST表 )
题目链接:点击进入题目思路ST 表是解决 RMQ 问题 ( 区间最值问题 ) 的一种强有力的工具O ( n log n ) 预处理,O ( 1 ) 查询最值minn [ i ] [ j ] 表示,从 i 位置开始的 2j2^j2j 个数中的最小值,也就是 a [ i ] ~ a [ i + 2 ^ j - 1 ] 中的最小值初始化 minn [ i ] [ 0 ] = a [ i ]转移方程 minn [ i ] [ j ] = min ( minn [ i ] [ j - 1] , mi原创 2021-08-12 21:50:16 · 378 阅读 · 0 评论 -
P2216 [HAOI2007]理想的正方形 ( 二维ST表 )
题目链接:点击进入题目思路maxx [ i ] [ j ] :左上角坐标 ( i , j ) ,边长为 2k2^k2k 的正方形的最大值minn [ i ] [ j ] :左上角坐标 ( i , j ),边长为 2k2^k2k 的正方形的最小值我们可以枚举 k ,已知长度为 2k2^k2k 的正方形可以由长度为 2k−12^{k-1}2k−1 的正方形推得,因此我们从 k = 0 开始递推,2k2^k2k 的正方形可以推出 2k+12^{k+1}2k+1 的正方形,枚举到 log2(n)−原创 2021-08-12 21:50:52 · 196 阅读 · 0 评论 -
P1816 忠诚 ( ST表 )
题目链接:点击进入题目思路区间最小值属于RMQ问题,可以用ST表来解决。代码// Problem: P1816 忠诚// Contest: Luogu// URL: https://www.luogu.com.cn/problem/P1816// Memory Limit: 125 MB// Time Limit: 1000 ms// // Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize(3)//原创 2021-08-12 21:50:39 · 322 阅读 · 0 评论 -
牛客2020年七夕节比赛 - F - 牛妹的考验( AC自动机 + dp )
题目链接:点击进入题目思路多串匹配,构建AC自动机,对于字符串权值的重复和包含的情况,可以在建 trie 树和求 fail 失配指针的时候进行处理,处理过后对于每个串,也就是每个对应节点,我们会得到它的权值 sum 。然后就是 dp [ i ] [ j ] ,代表长度为 j ,以 i 节点结束的字符串的最大权值。转移式:dp [ to ] [ i + 1 ] = max ( dp [ to ] [ i + 1 ] , dp [ j ] [ i ] + sum [ to ] ) ;( 当前原创 2021-08-08 17:15:14 · 181 阅读 · 0 评论 -
HDU - 4902 - Nice boat ( 线段树 )
题目链接:点击进入题目题意n个数,q次操作:1 l r x 将 [ l , r ] 内的数都变为 x2 l r x 把 [ l , r ] 内比 x 大的数都变为 gcd ( a [ i ] , x )思路第一个操作是一个典型的区间修改问题,第二个操作,其实也可以看作一个区间修改的问题,看第一个操作,我们可以知道,经过第一个操作过后,一整个区间都会变为同一个数,所以,我们对于每个区间可以维护一个 lazy 标记,看区间内的数是不是同一个数,用 data 记录这个数,同时我们可以维护一个 m原创 2021-08-08 09:29:34 · 469 阅读 · 0 评论 -
POJ - 2528 - Mayor‘s posters ( 线段树 + 离散化 )
题目链接:点击进入题目题意n 次操作,第 i 次给你一个区间 [ l , r ] ,将其染成 i 色,问最后会看见多少种颜色(操作区间交的部分,后来的颜色覆盖前面的颜色 )思路这个题n是1e4,而区间达到了1e7,如果我们用常规的线段树来存整个区间里的点,也就是开4e7的空间,代码// Problem: Mayor's posters// Contest: Virtual Judge - POJ// URL: https://vjudge.net/problem/POJ-2528//原创 2021-08-18 21:17:21 · 376 阅读 · 0 评论 -
P2580 于是他错误的点名开始了 - ( 字典树 )
题目链接:点击进入题目思路对于每个节点,记录以这个节点为终点的字符串的编号,查询的时候,若有返回编号,若无返回 0 ,对于重复的情况,可以用 vis 数组标记一下。代码// Problem: P2580 于是他错误的点名开始了// Contest: Luogu// URL: https://www.luogu.com.cn/problem/P2580// Memory Limit: 125 MB// Time Limit: 1000 ms// // Powered by CP Ed原创 2021-08-08 09:27:12 · 218 阅读 · 0 评论 -
HDU - 1251 - 统计难题( 字典树 )
题目链接:点击进入题目思路字典树,对于每个节点,记录一个以该节点为前缀的字符串数目 sum ,在插入的时候,每经过一个存在的节点,该节点 sum++ ,若该节点不存在,创建节点后,sum 赋初值 1代码// Problem: 统计难题// Contest: Virtual Judge - HDU// URL: https://vjudge.net/problem/HDU-1251// Memory Limit: 131 MB// Time Limit: 2000 ms// // P原创 2021-08-08 09:26:53 · 499 阅读 · 0 评论 -
P1558 色板游戏 -( 线段树 )
题目链接:点击进入题目思路线段树区间修改,可以用二进制存取颜色的状态,区间合并用或运算 ( | ) ,区间查询,将得到的状态用__builtin_popcount()函数 ( 用于计算一个 32 位无符号整数有多少个位为1 ) 转化为所求答案。( 貌似是这个题的中文版 ?! )代码//#pragma GCC optimize(3)//O3//#pragma GCC optimize(2)//O2#include<iostream>#include<string>#原创 2021-08-08 09:26:07 · 184 阅读 · 0 评论 -
POJ - 2777 - Count Color ( 线段树 )
题目链接:点击进入题目题意长度为n的序列,m种颜色,序列初始颜色均为第一种颜色,k次询问:C x y z 将 [ x , y ] 修改为第 z 种颜色P x y 查询 [ x , y ] 中不同颜色的数目思路线段树区间修改,可以用二进制存取颜色的状态,区间合并用或运算 ( | ) ,区间查询,将得到的状态用__builtin_popcount()函数 ( 用于计算一个 32 位无符号整数有多少个位为1 ) 转化为所求答案。代码//#pragma GCC optimize(3)//O原创 2021-08-08 09:25:46 · 445 阅读 · 0 评论 -
HDU - 1698 - Just a Hook( 线段树 )
题目链接:点击进入题目:题意给你一个长 n 的序列,初始值全为 1 ,q 次操作,每次将 [ x, y ] 的值改为 z ,问最后整个序列的和为多少思路线段树实现区间修改,以及根节点值查询代码//#pragma GCC optimize(3)//O3//#pragma GCC optimize(2)//O2#include<iostream>#include<string>#include<map>#include<set>//原创 2021-08-08 09:25:30 · 230 阅读 · 0 评论 -
P1273 有线电视网 ( 树形dp -分组背包 )
题目链接:点击进入题目思路背包的总容量 = 该点子树中所有用户数量组数 = 该点的子节点数每组内的元素 = 该点子树中用户数的选择方案( 选 1 个用户、2 个用户、3 个用户… 个用户 )每组内元素相互冲突然后,模型就变成了分组背包同时因为要求的是费用不亏本的情况下( 也就是总费用 >= 0 )的最大用户数,所以最后倒着枚举用户数看哪个费用大于等于 0 即可代码// #pragma GCC optimize("Ofast","inline","-ffast-math")/原创 2021-08-07 21:28:03 · 211 阅读 · 0 评论 -
POJ - 3468 - A Simple Problem with Integers( 树状数组 -> 区间修改 + 区间查询 )
题目链接:点击进入题目题意n 个数,q 次询问:C a b c 区间 [ a , b ] 都加上 cQ a b 求 [ a , b ] 的和思路树状数组实现 -> 区间修改 + 区间查询( 线段树也可做 )代码// Problem: A Simple Problem with Integers// Contest: Virtual Judge - POJ// URL: https://vjudge.net/problem/POJ-3468// Memory Limit:原创 2021-08-04 22:53:58 · 321 阅读 · 0 评论 -
HDU - 1166 - 敌兵布阵( 树状数组 )
题目链接:点击进入题目思路树状数组实现-> 单点修改 + 区间查询( 这题线段树也可以写,不过树状数组码量要小 )代码// Problem: 敌兵布阵// Contest: Virtual Judge - HDU// URL: https://vjudge.net/problem/HDU-1166// Memory Limit: 32 MB// Time Limit: 1000 ms// // Powered by CP Editor (https://cpeditor.or原创 2021-08-04 22:53:46 · 208 阅读 · 0 评论 -
P3368 【模板】树状数组 2( 区间修改 + 单点查询 )
题目链接:点击进入题目思路树状数组实现-> 区间修改 + 单点查询c [ i ] = a ( i - 2 ^ k + 1 ) + … + a [ i ]( 设节点编号为 i ,那么这个节点管辖的区间有 2 ^ k( 其中 k 为 i 二进制末尾 0 的个数)个元素,且最后一个元素为 a [ i ] 。)lowbit ( i ) => i & -i 计算 i 对应的 2 ^ kadd 函数更新 i 这位以及它之后的包含它的区间对应的 c 数组getsum 函数求 1原创 2021-08-04 22:53:31 · 254 阅读 · 0 评论 -
P3374 【模板】树状数组 1( 单点修改 + 区间查询 )
题目链接:点击进入题目思路深入学习树状数组实现-> 单点修改 + 区间查询c [ i ] = a ( i - 2 ^ k + 1 ) + … + a [ i ]( 设节点编号为 i ,那么这个节点管辖的区间有 2 ^ k( 其中 k 为 i 二进制末尾 0 的个数)个元素,且最后一个元素为 a [ i ] 。)lowbit ( i ) => i & -i 计算 i 对应的 2 ^ kadd 函数更新 i 这位以及它之后的包含它的区间对应的 c 数组getsum 函原创 2021-08-04 22:53:15 · 219 阅读 · 0 评论 -
HDU - 2196 - Computer( 树形dp )
题目链接:点击进入题目题意对树上的每个点,求出离这个点最远的点的距离是多少思路对于一个节点,最远距离可能在该节点的子树方向上,也可能在该节点的父节点方向上,两次dfs,第一次求出该节点子树方向上最长距离,第二次求父节点方向上的最长距离,两次取最大值就是这个点的最大距离dp [ u ] [ 0 ] :在 u 的子树下离 u 的最远距离是多少dp [ u ] [ 1 ] :在 u 的子树下( 和 dp [ u ] [ 0 ] 不是同一孩子 )u 的次远距离是多少dp [ u ] [ 2 ]原创 2021-08-04 10:25:29 · 394 阅读 · 0 评论 -
POJ - 1185 - 炮兵阵地( 状压dp )
题目链接:点击进入题目思路此题与前面的 Corn Fields 解法类似。炮车与炮车之间不能相邻,隔行也不能相邻,每个炮车能不能放只与上一行,上一行的上一行和当前这一行有关,所以,我们可以想到一行一行的递推,这是行与行之间,行内部之间也不能相邻,不能间隔相邻,这个,我们可以预处理出一行所有的可行的不相邻的状态( 最多 1<<m 种 ),三维dp,一维表示第几行,一维表示当前行内部的状态,一维表示上一行内部的状态,每行内部的状态可以用二进制来表示,对于上下之间的不相邻问题,可以通过三行原创 2021-07-28 17:00:46 · 228 阅读 · 0 评论 -
POJ - 3311- Hie with the Pie ( 状压dp )
题目链接:点击进入题目题意从 0 出发经过所有点最后再回到 0 点的最短距离( 可以多次经过同一个点 )思路dp [ i ] [ j ] 代表经过状态 i 里的点最后到 j 点经过的距离首先用 floyd 求每两个点间的最短距离,然后从 0 -( 1<<n ) 枚举每个状态,更新dp值如果这个状态只经过 j 这个点,那么 dp [ i ] [ j ] = dis [ 0 ] [ j ];(一开始就是从 0 出发)如果经过了多个点,可以通过枚举中间点,来更新 dp 值( 类似原创 2021-07-28 17:00:34 · 201 阅读 · 0 评论 -
POJ - 3254 - Corn Fields ( 状压dp )
题目链接:点击进入题目题意n * m 的土地,告诉你每个位置可以不可以种玉米,摆放奶牛需要放在可以种玉米的地方,同时奶牛不能相邻( 上下左右 ),问共有多少种摆放奶牛的方案思路牛与牛之间不能相邻,每只牛能不能放只与上一行和当前这一行有关,所以,我们可以想到一行一行的递推,这是行与行之间,行内部之间也不能相邻,这个,我们可以预处理出一行所有的可行的不相邻的状态( 最多 1<<m 种 ),二维dp,一维表示第几行,一维表示行内部的状态,每行内部的状态可以用二进制来表示( 因为 m 只原创 2021-07-28 17:00:19 · 163 阅读 · 0 评论 -
P4173 残缺的字符串 - ( 通配符的单模式串匹配 && FFT )
题目链接:点击进入题目思路学习链接普通串匹配过程,大致思路:1、定义匹配函数2、定义完全匹配函数3、快速计算每一位的完全匹配函数值代码#include<iostream>#include<string>#include<map>#include<set>//#include<unordered_map>#include<queue>#include<cstdio>#include<ve原创 2021-07-28 15:56:56 · 168 阅读 · 0 评论 -
POJ - 2018 - Best Cow Fences ( 浮点二分 + 最大连续子段和 )
题目链接:点击进入题目题意一个长度为 n 的数组,数组内都是正整数,求长度大于等于 f 的且平均值最大的连续子序列。思路二分平均值,对于每个二分得到的平均值,预处理一个辅助数组,存储 原数组减去平均值 的结果。为什么减去平均值?!减去平均值是为了更好的判断区间平均值与二分平均值的关系。例如,对于这个辅助数组,求长度不小于 f 的连续子序列,若是满足和 不小于 零,则代表了这段区间内的原数组的平均值 不小于 二分得到的平均值;否则小于。因此,我们对根据二分平均值得到的辅助数组,进行最大连原创 2021-07-27 10:10:37 · 247 阅读 · 0 评论 -
灌水-(最小生成树(森林)+虚拟点)
题目描述:点击进入思路最小生成树变形新建虚拟 “零” 节点,这个节点跟每个农田 i 连边,权值分别为在农田 i 建造水库的花费。然后其他的边正常连,最后求最小生成树即可。代码#include<iostream>#include<cstdio>#include<vector>#include<cmath>#include<cstring>#include<algorithm>#define INF 0x3f3f3f3原创 2020-11-09 19:20:24 · 2168 阅读 · 13 评论 -
P2371 [国家集训队]墨墨的等式- ( 同余最短路 )
题目链接:点击进入题目思路同余最短路问题,如果单独求能组成小于 l / r 的数有多少个,那么直接套板子,但是题目要求在 [ l , r ] 区间内能组成的数有多少个,那不就是组成小于 r 的数的个数 减去 组成小于 l - 1 的数的个数的差值????代码#include<iostream>#include<string>#include<map>#include<set>#include<stack>//#include原创 2021-03-09 21:50:41 · 148 阅读 · 3 评论 -
洛谷-U132410-最小代价(最小生成树(森林)+ 虚拟点)
题目描述:点击进入思路最小生成树的变形我们虚拟一个 “零” 结点,这个结点跟每个村庄 i 连边,权值分别为在村庄 i 建立一个网络中心的花费。然后其他边都正常连,最后求最小生成树即可。代码#include<iostream>#include<cstdio>#include<vector>#include<cmath>#include<cstring>#include<algorithm>#define INF 0x原创 2020-11-09 19:15:36 · 416 阅读 · 7 评论 -
P3403 跳楼机-( 同余最短路 )
题目链接:点击进入题目思路同余最短路是一种优化最短路建图的方法,通常解决给定 n 个整数,问这 n 个整数能组成出多少个小于指定数字 h 的不同整数的问题 ( 这 n 个整数可以重复取 ) 或 给定 n 个整数,求这 n 个整数不能组成的最小( 或最大 )的整数的问题。n 个整数 a1 - an ,我们选择一个最小的 ai ( a1 ) 作为 base ,然后把其他的 ai 表示成 base ∗ k + r 的形式。余数 r 取值 [ 0 , base - 1 ] ,对于每个 r 建点,同时对于原创 2021-03-09 21:31:59 · 226 阅读 · 0 评论