自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

swqeaaa的博客

摇摆起来

  • 博客(331)
  • 收藏
  • 关注

原创 算法

二叉树构造给出前序遍历和中序遍历求二叉树。前序遍历:父,左子树,右子树中序遍历:左子树,父,右子树性质:前序遍历一定是父亲节点开始。从而我们可以知道谁是父亲节点,以及其在中序遍历的位置。此外我们知道,与父节点是一个点不同,上面前序遍历、中序遍历中写的左子树,右子树是两个可空的范围。我们知道了父节点的中序遍历位置后,就能知道子树长度(左子树和右子树)。从而知道(以当前节点为根的)中序遍历、前序遍历数组的构成情况。然后使用递归解决。从上至下,每一层递归得到当前层每个根节点(及子树构成情况)。

2020-12-07 20:37:17 120

原创 B - Marbles Gym - 101908B SG函数

有一堆棋子在棋盘上, A和B轮流走, 每次可以取一个棋子向上或向左走任意步, 或者向上以及向右走x步, 最先把一个棋子移动到0 0的人赢, 问A能不能赢.SG保证当前状态的子状态的sg都已经求出. 把子状态的sg放入集合, 第一个不在集合中的数就是当前状态的sg.这个题中, 第0行和第0列以及对角线上都是不可达的状态, 没有人会主动把棋子移动到这些位置. 所以说没有人的子状态会是这些点, 这...

2019-11-05 19:32:09 486

原创 CF 1220 D数论E图论/tarjan/dfs

D Alex and Julian小a拿到一个集合就会把这里面的数当作步长, 在图上对编号之差为合法步长的点连边. 这样就会连无数条边. 问题是现在给出一个集合, 保留其中尽量多的数, 保证交给小a之后他会生成一个二分图.很简单的分析之后我们就可以发现, 当只保留奇数作为步长的话, 是一定能构成二分图的...

2019-10-03 22:55:41 214

原创 CF 1228 C 数论 D 图论/hash E dp

C Primes and Multiplication给出x(1e9)和n(1e18), 对于x的所有质因子y, 对于1到n每个数计算最大的是y的幂次的因子z, 对于这些z求乘积.x的质因子很好求. 第二步我们总不能枚举1到n所有的数然后二分来做.我们假设a是x的质因子之一.可以想到, 1到n能被a整除的数恰好是n/a个, 1到n能被a2a^2a2整除的数恰好是n/(a2)n/(a^...

2019-10-03 21:52:21 185

原创 GYM 102059 G Fascination Street

G Fascination Street给出一串n(2e5)个灯, 每个灯点亮可以照到相邻三个位置, 每个灯点亮都有不同的花费, 现在可以交换k(9)次灯的位置, 求把所有n个位置都照到的最小花费.交换的肯定是一个亮的灯和一个灭的灯, 不然是没有意义的.(即, 将一个花费低的灯点亮, 根花费高, 未点亮的灯交换位置.)对于每个位置i, 保存最后两个灯(i-1,i)是否点亮(注意是点亮, 不是...

2019-09-25 22:05:58 280 1

原创 CF 1230E Kamil and Making a Stream

给出一棵树, 点上有权值, 对于每个点, 求它和所有后代节点的GCD的和.一开始的思路: 用当前节点更新祖先节点…然而对于每个点会收到n个点的贡献.实际上, 如果我们用当前节点更新后代节点的贡献, 那么每个点只会收到log(n)个贡献, 这样就不会T了.map<ll, int> mp[M];vector<int> to[M];ll x[M],ans = 0;in...

2019-09-24 18:44:46 393 1

原创 CF 1214 D Treasure Island 网络流

有一个nm的格子, 一个人起点11, 目的点是nm可以往右/往下走, #为不能走的点, 问做少把几个.改成#(不能改起点和终点)能让这个人不能走到.当然最多改2个鸭最小割就是最大流啊网络流冲冲冲把图里的每个格子拆成两个点, 其间的流量就是去掉这个点的代价(1), 当然第一个点和最后一个点代价是inf.然后每个点的2号向其下/右的点的1号连边, 流量是inf.然后从起点到终点跑网络流就行...

2019-09-19 20:06:06 418

原创 最小生成树

给出一个图, 其中一些特殊点只能连一条边, 问最小生成树的权值.我们可以发现, 生成树上一个点如果只能连一条边, 那么他肯定是叶子结点.有两个思路:用非特殊点跑最小生成树, 最后再把特殊点接上就行了. 这是赛后听到的思路.直接跑prim, 但是特殊点不用来更新其他点的距离(dis).理论上第二种也挺简单的, 然而赛中疯狂wa…因为判断因为是特殊点不再更新和因为是走过不再更新两个的顺序出了...

2019-09-19 18:51:04 217

原创 CF 1208D Restore Permutation 线段树

现在藏起来一个1到n(2e5)的排列, 对于每个位置i, 给出a[1]到a[i-1]中小于a[i]的数的和s[i], 让我们求这个排列a.首先我们找找1的位置.因为没有数比1小, 所以不论1在哪里, 它的s肯定是0;而如果s中有多个0, 1一定在最后一个0—因为如果1在其他0的位置, 最后一个0没法解释—不论最后一个数是什么, 它肯定比1大, 前面的1一定会对这个数产生贡献, 这样我们就证明...

2019-09-04 09:33:20 168

原创 LightOJ1151 Snakes and Ladders 高斯消元 期望dp

给出1到100共100个格子排成一行, 到达一些格子时会瞬间转移, 每次投骰子来确定走的步数, 如果走出格子之外就重新投, 问走到100号格子的期望步数.如果每个格子瞬间转移只会向后的话, 就是普通的期望dp—只需从后往前dp即可. 但是有些格子可能会往回跳, 所以不满足无后效性.按照普通期望dp的做法, dp[i]表示从i这里开始走, 走到终点的期望步数. 可惜在当前情景下, 我们计算i时可...

2019-09-02 23:13:48 161

原创 AtCoder ABC139E League 判dag dag上简单dp

有n(1000)n(1000)n(1000)个人, 每个人都要和其他n−1n-1n−1个人进行比赛, 每个人都规定了他参加的n−1n-1n−1场比赛的顺序, 问是否有一种比赛顺序能满足所有人心意. 此外, 每天可以安排多场比赛,但每天一个人只能参加一场比赛. 如果不能满足所有人的心意输出−1-1−1, 如果能够满足所有人心意, 那么输出最少需要比赛多少天.设[A,B][A,B][A,B]代表AA...

2019-09-02 18:54:32 346 1

原创 CF 617E XOR and Favorite Number 异或和为k的区间个数 莫队

给出一个长度1e5的数组, 1e5次询问, l到r之间异或值为k的区间个数.这个题的思想和那个"求区间和为0的最长区间长度"的题很像.若KaTeX parse error: Can't use function '\^' in math mode at position 2: a\̲^̲b=c, 那么KaTeX parse error: Can't use function '\^' in m...

2019-08-22 15:46:43 479

原创 莫队 最长区间和为0

之前看到过一个经典问题, 可能能对理解这个题为什么可以转化为求前缀和的问题有所帮助.k倍区间: 给出一个数组, 问多少个区间的和是k的倍数.不妨设a为原数组, sum前缀和数组, 设∑i=lra%k=0\sum\limits_{i=l}^{r}a\%k=0i=l∑r​a%k=0, 实际上相当于sum[r]%k−sum[l−1]%k=0sum[r]\%k-sum[l-1]\%k=0sum[r]%...

2019-08-22 12:58:29 321

原创 整体二分 二维BIT 洛谷 P1527

给出一个500*500的矩阵, 6e4次询问, 每次询问一个子矩阵第k小的数.将所有的值(修改)和查询放入数组, 进行整体二分.对于当前区间使用二维BIT维护任意区域内<=mid的数的个数.因为整体二分的递归只与数组(q)的下标范围和答案范围有关, 所以本题除了把BIT换成二维, 其余是不用更改的....

2019-08-21 10:05:00 140

原创 树上背包的O(nV)做法 HDU1561 洛谷P1064

虽然连续依赖可能构成森林, 但我们可以虚构一个超级根节点解决这个问题.普通的做法:HDU 1561对于一棵树, 我们考虑从叶子节点一路推到根节点来计算总的最大价值. 按深度从深到浅依次枚举每个节点, 每个节点枚举子节点的每个泛化物品更新当前节点的泛化物品. 这样的做法很容易想到, 但是复杂度是O(nV2)O(nV^2)O(nV2)的.dp[i][j]dp[i][j]dp[i][j]表示考虑...

2019-08-20 22:59:07 300

原创 洛谷 P2967 依赖背包

主件有花费无价值, 附件有花费有价值, 附件没有附件, 主件50个, 每个主件有10个附件, 背包容量1e6, 问最大价值.之前做依赖背包和树上背包都是O(nV2)O(nV^2)O(nV2)的复杂度…毫无疑问会T…看了题解原来有O(nV)O(nV)O(nV)复杂度的做法.注意: 这是依赖背包的O(nV)O(nV)O(nV)做法, 树上背包因为有连续依赖, 必须借助dfs(类似树形dp)的方式才...

2019-08-20 11:33:26 236

原创 HDU 6681 树状数组 欧拉公式

给一个长方形的

2019-08-20 10:24:59 201

原创 树上背包入门 HDU 1561 O(n*V^2)的做法

有依赖背包是有多个主件, 每个主件有多个附件, 但是附件不会再有自己的附件.而树上背包就是构成了连续依赖的背包, 他们的关系是一棵树(保证不会循环依赖, 每个物品只会依赖最多1个物品)(取了根节点才能取第二层的节点, 取了x节点才能取x的儿子节点, 取了从根节点的一条链才能取叶子节点).对于这样的问题, 我们的核心思想是: 树上背包=分组背包+依赖背包.我们按照从叶子到根的顺序处理, 保证处...

2019-08-17 10:34:09 178

原创 多重背包 模板题 二进制拆分 洛谷 P1776 宝物筛选

每类物品每2的幂次分成一组, 每个小组合并为1个大物品, 做01背包.重新划分新物品要注意两点:Ⅰ2的幂次从小到大枚举Ⅱ拆分有剩余直接将剩下的放入.代码:int n;ll W, dp[M], v[M], w[M], m[M];struct node {ll v, w;};vector<node> obj;void init() { n = read(), W...

2019-08-15 20:48:03 284

原创 整体二分入门模板

运用整体二分的情景:所谓整体二分,需要数据结构题满足以下性质:询问的答案具有可二分性修改对判定答案的贡献相对独立,修改之间互不影响效果修改如果对判定答案有贡献,则贡献为一确定的与判定标准无关的值贡献满足交换律,结合律,具有可加性题目允许离线操作蒟蒻只会用整体二分写第kkk小…下面是大体的思路:对于一次询问lll到rrr之间的第kkk小值, 我们可以考虑二分答案:假设答案是...

2019-08-14 01:04:29 232

原创 HDU 6656 Kejin Player 概率(期望)dp

题意: 一个武器共有n+1级, 给出第i级升到i+1级的花费, 成功概率, 失败掉回第几级, 给出q次询问, 每次问从第l级升到第r级的期望花费.可以发现这个题的期望具有可加性: 设dp[i]dp[i]dp[i]表示iii升到i+1i+1i+1的期望花费, 那么iii升到i+2i+2i+2的花费就是dp[i]+dp[i+1]dp[i]+dp[i+1]dp[i]+dp[i+1], 那么对于任意ll...

2019-08-13 11:45:57 206

原创 牛客 19多校8 Distance 定期重构

给出一个n∗m∗h≤105n*m*h\leq10^5n∗m∗h≤105的三维空间, q≤105q\leq10^5q≤105次操作, 操作1: 向空间中加入一个标记的点; 操作2: 询问一个点到标记点的最小曼哈顿距离.注意到n∗m∗h≤105n*m*h\leq10^5n∗m∗h≤105, 所以一次BFSBFSBFS的复杂度也只有10510^5105, 考虑暴力.我理解的定期重构就是一种优雅的暴力...

2019-08-13 11:01:38 178

原创 莫队的一点点总结

普通莫队就是暴力几个注意的地方:排序关键字顺序: blo[l]&gt;rblo[l]&gt;rblo[l]>r, 即按blo[l]blo[l]blo[l]排序, blo[l]blo[l]blo[l]相同按rrr排序.lll和rrr移动的操作要先动add, 否则会出现cntcntcnt为负的情况.如果要记录出现次数的次数(CNTCNTCNT数组), CNTCNTCNT...

2019-08-11 10:44:00 111

原创 牛客 19多校7 H 数位dp

给出A, B, C, 在1~A中找一个数x, 1~B中找一个数y, 使得x&y>C或x^y<C, 问这样的二元组(x,y)有多少对.原来数位dp可以这么骚的...虽然大佬们说这是个裸题...因为^和&运算都是位运算, 所以把ABC都分为2进制表示.我们考虑最暴力的做法: 枚举x, 枚举y 判断是不是满足题意. 在这个过程中, 我们发现做了很多无用功, 例如,...

2019-08-08 23:27:33 143

原创 2019 牛客 6 J D 思维 暴力

J共个武器, 每个武器都能升m级, 给出一个n*m的矩阵c, 第i行第j列代表i武器从j-1升到j级的花费(可能为负), 又给出一个长度为m的数组, 第i个数代表如果每个武器都升到i级(或以上), 就能获得这个奖励(可能为负), 问最多能得到多少钱.可以发现, 如果升不到j-1级就到不了j级, 换句话说, 升到j级肯定取了前面所有的花费, 奖励的数组也是同理, 所以, 这个矩阵和数组都可以...

2019-08-04 01:39:17 313

原创 CF 225C Barcode dp

给出一个字符矩阵, 现在把每一列变成相同的字符, 问使得连续列都是相同字符的长度>=x且<=y的最小花费是多少.考虑这个字符矩阵的行是没有真实作用的. 其实就是将这个字符矩阵换为两个长度为列数的数组, 此后就是简单的dp了.新字符如果和前面相同, 转移;新字符和前面不同, 只有当前面的字符连续个数达到x个(当然也要小于y)才能转移.新知识: 如果实在不知道初态怎么设, ...

2019-08-03 23:37:03 151

原创 CF 225D snake 贪吃蛇NB 搜索 状压

给出一个地图,

2019-08-03 23:18:32 240

原创 CF 1183H Subsequences dp

题意: 给出一个长度为n的字符串, 求一个大小为k的子序列集合, 使得花费最小, 每个子序列的花费是和原串的长度差.思路:其实只要知道, 这个字符串的各种花费的子序列有多少个, 先取花费小的(长的), 再取长度短的就好.所以主要的问题就是求各个长度的子序列各有多少个.注意到, 因为贡献只与子序列长度有关, 所以我们只关心长度和对应的个数, 具体字符串长什么样是无所谓的.到此为止...

2019-08-02 23:26:40 100

原创 HDU 6582 Path BZOJ 1266 上学路线route 网络流 最短路

给出一个图, 问从起点到终点, 问去掉一些边使得最短路增大, 求最少的花费是多少(6582是边长, 1266是给定的).另外, 6582是有向边, 1266是无向边.这个题可以分解成两部分:Ⅰ求出最短路所有路径上的边Ⅱ在Ⅰ上新建一个图, 跑网络流最小割.最小割: 就是把起点和汇点割开的最小花费.这样, 就是花费最少的代价, 把所有的最短路径割断, 进而增大了最短路.Ⅰ就...

2019-07-25 23:37:04 120

原创 一些瞎搞的题

字符串求方案数CF1084 CThe Fair Nut and String 字符串求满足要求的子序列个数求一个都是a的子序列, 且在原串里,每两个a中间有一个b, 问有多少个这样的子序列.首先. a和b之外的字符是没有意义的. 相连的b也是没有意义的, 相当于只有一个. 只需要用b把a分割成多个子段,每个子段取1个a/不取, 所以答案就是(连乘)(每个段长+1)-1....

2019-07-24 00:00:40 119

原创 牛客 2019 多校 1 C E I dp 线段树 思维

C Euclidean Distance题意: 给出高维空间的一个点A, 求另一个点P满足坐标非负且坐标和为1, 使得P到A的距离最小.真正的思路:https://www.cnblogs.com/dillonh/p/11215846.html虚假的思路: 本以为可以用拉格朗日乘子法做, 最后发现没有考虑坐标非负的条件, 不是只有等值约束,还有n个不等式约束, 所以L函数会多n个系数不...

2019-07-24 00:00:30 102

原创 CF 1096 D Easy Problem dp

给出一个字符串, 现在可以删除一些字符, 要求不能出现"hard"这个子序列, 而每个位置的字符都有代价, 问最小代价是多少.dp表示前面最坏出现了"hard"的多长的前缀:dp[0]表示前面花费了dp[0]的代价, 使得从开头到当前位置不存在hard的任何前缀.dp[1]表示前面花费了dp[1]的代价, 使得从开头到当前位置存在"h"的任何前缀.dp[2]表示前面花费了dp[2]...

2019-07-23 22:55:41 121

原创 CF 1084 D The Fair Nut and Strings 树形dp

给出一棵无根的树, 每个节点上有价值, 边上有花费, 每到一个点能得到这个点的价值, 每到一条边会减掉这个边的价值, 只有当前拿到的价值>花费才能走这条边, 在随意选择起点和终点的情况下, 问最多能得到多少价值.思路: 这个题与那个Computer的树形dp很像, 无非是多了几个限定条件, 点有了价值, 边有了花费, 还是求最大价值.Ⅰ首先将这个无根树固定一个根, 每个点就有了固定的...

2019-07-23 10:16:24 146

原创 HDU 4283 You Are the One 区间dp

题意: 有一列人, 他们每个人有屌丝值, 每个人根据上场顺序会有不满意度, 是在他之前上场人数乘屌丝值. 现在有一个栈可以暂时人, 问最后所有人都上场最少会产生多少不满意度.思路:dp[i][j]表示从第i到第j个人最少产生的不满意度.现在假设i到j已经是最优区间, 考虑i前面的人i-1:这个人可能Ⅰ直接上场, 或者Ⅱ进栈之后在j之后上场.那么dp[i-1][j]就会由两个值进...

2019-07-19 17:52:53 82

原创 HDU 1251 入门字典树

题意: 给出一些单词, 再询问一些单词是之前那些单词的多少个的前缀.字典树:x表示整个字典树的第几个节点, c表示这个字符串第x个节点处是c字符. trie表示下一个字符是几号节点.每个节点只能由一个节点的某个字符得到, 每个节点的每个字符都有可能连接到一个节点, 所以这是一个树.当这个树满时, 空间是26^len.对于这个题, 每个节点储存走到过这个节点的上一节点的字符串个...

2019-07-17 17:34:18 91

原创 HDU 3336 Count the string kmp 递推dp

题意: 每个前缀出现次数的和.思路: cnt[pos]记录第pos个前缀x在比他长的前缀y中出现的次数,递推式:定义原串的前缀为x类串.每个长度为a的x类串s会包含2个长度为nxt[a]的x类串t, 而两个相邻的s会有一个重复的t, 所以cnt[a]个s会有cnt[a]+1个t.最后答案加上每个前缀本身共m. 具体见代码.#include <iostream>...

2019-07-17 11:28:06 117

原创 KMP的一些总结

小结论:nxt[x]表示前0~x-1位存在的最长前缀=后缀的长度.一个字符串长度为m, 那么最小循环节长度为m-nxt[m]s串任意前缀的nxt数组就是s串的nxt数组, 直接用就行了kmp的小技巧:① 如果只看s中有没有t,kmp()循环加上当j==m时break的条件.② 如果求出现次数, 要去掉①中的条件, 并每当j==m(匹配成功)时, 把j赋为nxt[j]③ ...

2019-07-17 11:25:20 128

原创 有关GCD 质数 互质 的一些小结论

1: n以下三个数LCM的最大值:2: 若干个数的GCD!=1, 那么这些数会有一个公共质因子3: CF 1033 DDivisors把一个数分成若干个质数的幂次的乘积, 例如: ,那么, 这个数的因子的个数为(①).反过来也是同样:假设一个数的因子个数为4, 它会是几个质数的乘积呢?由公式①, 显然它最多有2个质因子.假设第一个质数a1的幂次为x, 第二个...

2019-07-16 23:56:22 438

原创 CF 757 B Bash's Big Day gcd 质因子分解

题意: 给出一个数组, 问最多能取出多少个数使得其gcd不为1.思路:若干个数的gcd!=1等价于这些数有一个公共质因子.这样, 问题就变为: 一个质数被数组中多少个数用到, 找到被用到最多的那个质数, 输出它被用了多少次.只要对数组中的每个数分解质数因子, 统计每个质数被用了的次数即可.质数分解: int x = a[i]; int pos = 0; ...

2019-07-16 23:09:04 145

原创 HDU 3530 Subsequence 尺取 RMQ

题意: 给出一个数组, 长度为1e5, 1次询问, 给出一个上界R, 一个下界L, 问最大值减最小值差∈[L, R]的区间最长是多少.思路: RMQ当然可以维护M-m, 但是因为对M-m有两个限制, 没有单调性就不能二分解决..只能用我不太熟悉的尺取了.尺取的具体思路见代码: // a~b如果M-m>上界, a~c只会增大M, 减小m // 增大M...

2019-07-16 22:51:46 127

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除