![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
心得
文章平均质量分 85
mxYlulu
ACM燃烧我的卡路里
展开
-
卡特兰数小总结
PS:当前该专题未系统刷题参考自:大佬1、大佬2.问题一: 括号匹配问题nnn个左括号,nnn个右括号,要求左括号和右括号匹配,总方案数。即中间不能出现前缀的右括号数量大于左括号。考虑随机放的方案:C(n,2n)C(n,2 n)C(n,2n)考虑不合法的情况,如果我们把第一个不合法的位置设为kkk,将[1,k][1,k][1,k]翻转。得到的左括号为n+1n+1n+1。那么对于一个左括号为n+1n+1n+1,右括号为n−1n-1n−1的随机放的方案能不能转换成原来的不合法方案呢。如果左括号原创 2020-06-13 10:49:35 · 275 阅读 · 0 评论 -
特征方程
这里尤指数列的特征方程。参考至:点击此处 、以及此处一个数列:xn+2=c1xn+1+c2xnx_{n+2}=c_1x_{n+1}+c_2x_{n}xn+2=c1xn+1+c2xn假如存在rrr、sss使得xn+2−rxn+1=s(xn+1−rxn)x_{n+2}-rx_{n+1}=s(x_{n+1}-rx_{n})xn+2−rxn+1=s(xn+1−rxn)xn+2=...原创 2019-10-26 15:03:11 · 10262 阅读 · 0 评论 -
状态结点查重的问题
lrjlrjlrj老师给我们三种解决办法,对于一个节点的查重。这里拿八数码问题中的状态查重来介绍:数组表示了当前状态。编码和解码将排列变成整数:设计一套排列的编码和解码,把0−80-80−8的全排列和0−3628790-3628790−362879的整数一一对应。然而具体实现的对应并没有看懂。int vis[362880],fact[9];void init_lookup_tabl...原创 2019-06-12 15:17:15 · 250 阅读 · 0 评论 -
简谈分层图
分层图是一个处理对边存在额外操作的较好的处理方式。这里引入一道例题,在正常的最短路中,你可以挑选k条路不需要花费时间,那么最小总花费是多少?存在一种dpdpdp的处理方式,dp[i][j]dp[i][j]dp[i][j]表示到第i个节点用了j次免费,dp[n][0 k]dp[n][0~k]dp[n][0 k]即为答案。那么怎么去转移呢,dp[v][j]=min(dp[u]...原创 2019-06-30 03:35:31 · 302 阅读 · 0 评论 -
树形DP的背包问题
树形DP有一类问题是关于选择节点:我们可以用dp[i][0]表示不选,dp[i][1]表示可选可不选。这里我们讨论的是树形dp的背包问题,也就是对节点个数限制,同时要求尽可能的价值极值。我们考虑这样的动态规划方程:dp[i][j+k]=max(dp[i][j+k],dp[i][j]+dp[son][k]);不断用孩子节点更新:你取j个结点,新的孩子结点取k个结点。PS:这里遍历孩子...原创 2019-05-18 23:43:20 · 894 阅读 · 0 评论 -
并查集对状态的维护
这里的题目一般都是维护状态,每个集合表示的是一种状态(一般为两个)题目会询问第一次状态冲突的时候[并查集添加状态的时候发现已有状态并且状态不对]数据结构K题K题讲述的是:告诉你n个区间的和的奇偶,判断第一个矛盾的地方。区间和的奇偶可以转换成可以维护的前缀和之差的奇偶,和为奇,前缀和sum[l-1]和sum[r]一定奇偶不同。前者奇后者偶,或者反过来。这两种状态我们都添加到并查集...原创 2019-05-19 13:12:16 · 266 阅读 · 0 评论 -
Trie在求异或上的优秀做法
【参考了一些大佬:懒得放上来了..】Trie实质上是字典树,查询字符串是否存在可以用字典树查询(来可以查询多少个)这里我们用字典树查询Trie中的二进制串,异或值越大,代表高位差的越多,所以我们把数的二进制从高位记录。并从高位开始尽量走相反的路,能保证最大。具体看代码。D. Vasiliy's MultisetHDU4825NBUT-1597这三题只给出第一题的代码。第...原创 2019-05-19 13:12:09 · 297 阅读 · 0 评论 -
数组链表的巧用
HDU6058题意:对于这种纯暴力计算贡献的,我们考虑用每个数字的贡献来计算。考虑每个数字作为第k大的数字,则左边有x个比它大的,右边就有k-x-1比它大的记录比它大的位置,O(nk)可以实现,方便去除和记录用链表实现。[从小到大,周边的一定比自己大]我们从最左边开始,往右搜保证每次数字都是第k大的。最后加起来。#include<bits/stdc++.h>...原创 2019-05-05 00:29:38 · 339 阅读 · 0 评论 -
ACM第一年总结
明天正好就是正式接触ACM一年了vj:84codeforce:115洛谷:206CDOJ: 大概三四十道(不用了)UESTC OJ :58一年下来 就写了五百多道题....接触ACM的第一年打了很好的基础,只能说是编程和简单思维上吧。现在开始才是真正的训练了。正经脸:不埋怨过去,放眼未来。这两个月的暑期集训选拔。加油!...原创 2019-05-04 18:40:47 · 193 阅读 · 0 评论 -
删数游戏(单调栈)
P1106 删数问题题意:删去k个数字,使剩下的数字最小。题解:我们考虑两个数字,肯定高位低的数字更小,随后再尽量保证低位小。利用单调栈维护一个n-k长的上升序列,如果新入栈的数比栈顶小就一直出栈直到不小。因为序列要保证长度,每个数只会入栈一次,出栈就删一个数。不过很有可能没删完就结束了。所以循环结束,需要把n-k以上的删完。特判下0。#include<iostre...原创 2019-05-04 02:00:40 · 495 阅读 · 0 评论 -
基本线段树
线段树可以实现很多的操作。这里就一些最基本的操作进行讨论。线段树是通过区间合并和lazy标记作为核心来实现log级别的操作的。区间合并是核心中的核心,你所要支持的操作需要转换成可以进行区间合并的形式。这里讨论了一些常见操作的维护+区间合并的题目。数据结构A题基本上维护和以及平方和,支持赋值、增、乘的操作。多个操作需要注意优先级:赋值*乘+增。pushdown的时候,赋值...原创 2019-05-19 13:12:35 · 135 阅读 · 0 评论 -
缩点tarjan练习
注意:tarjan缩点,对于有向、无向图依然成立。因为是min操作,所以是不断更新的。tarjan缩点,对于dp树的操作,从孩子结点贡献往上增加,这样是不对的:如图,不是环所以不会被删除,但是如果dp树通过拓扑排序实现的话,3的结点被2记录之后,又通过1再次被记录。缩点后的本来就不一定是树的(一般都是有向图,如果是无向图肯定还是树)T1:洛谷P2341...原创 2019-04-15 01:13:23 · 214 阅读 · 0 评论 -
交换得来的有序序列
这类题型,一般有两种,一种是交换相邻元素,一种是交换任意元素。交换相邻的最少次数:对于从小到大的每个数,先从第一个的逆序对算起,然后把它往前放到第一个,再到第二个,再继续往最前放,也是加上逆序对。最后其实就等于加上每个数原本的逆序对,因为从大到小的操作,能保证我移动过后,这个元素放到前面也不会增加我其他的逆序对。交换任意的最少次数:对于一系列元素,把元素和其有序时候的位置建立边...原创 2018-09-29 15:35:17 · 243 阅读 · 0 评论 -
最短路进阶一:floyd传递闭包问题[POJ-3660]
会有这样的题目,数据量较小,给出两点间之间的关系,求最后是否矛盾(并查集:不过那道题还没有弄懂),或者求出一共有几层关系(火车排队:拓扑排序最长路),以及求出所有能够满足的关系简单来说:这里我们要求求出所有的关系,通过已给出的关系。题目:POJ-3660要求判断给出的点是否能确立和其他的点的大小关系,通过已给出的大小关系。可以floyd求解:做法一:先读入关系,但必须是有向边,否则处理会...原创 2019-05-29 00:10:05 · 261 阅读 · 0 评论 -
紫书:二分图匹配 最大流解决
网络流的一个经典应用是二分图匹配。匹配是指:两两没有公共点的边集。二分图是指:可以把结点集分成两部分X和Y,使得每条边恰好一个端点在XXX,另一个端点在YYY。换句话说,同色节点不相邻,进行二染色。一般在画图的时候,把XXX结点和YYY结点画成左右两列。可以证明一个图是二分图,当且仅当没有奇数圈。当我们使用dinicdinicdinic跑二分图的时候,复杂度只有O(n12m)O(n^\f...原创 2019-06-01 22:54:06 · 559 阅读 · 0 评论 -
带权并查集的基本操作
参考博客带权并查集就是一系列能够维护结点到根节点权值的特殊并查集。常用于区间可合并的求和和判断。甚至差值也可以判断。十分巧妙。在查询操作上,维护权值,路径压缩到根节点的过程,将中间的路径长度也加到该点上。int find(int x){ if (x != f[x]) { int t = f[x]; f[x] = find(f[x]); sum[x] += sum[t];...翻译 2019-06-30 11:49:46 · 292 阅读 · 2 评论 -
浅谈数论分块
这里只是最简单的解说和证明。数论分块常用于解决一类问题:∑i=1XXi\sum_{i=1}^{X}\frac{X}{i}∑i=1XiX用数论分块解决的同式:首先我们要了解Xi\frac{X}{i}iX最多只有2N2\sqrt{N}2N个不同的值。所以数列呈现出来的样子是这样的:yzcbbdddddyzcbbdddddyzcbbddddd我们只要求出来对应相同值的区间即可。解决方...原创 2019-07-05 05:11:18 · 1847 阅读 · 0 评论 -
AtCoder Beginner Contest 132 F
F - Small Products怎么说呢?目前超了自己水平两个档次的题。第一个档次熟练掌握dpdpdp第二个档次熟练掌握分块这道题:参考大佬要求求相邻元素乘积≤N≤N≤N的序列数。N≤1e9N≤1e9N≤1e9序列数考虑dpdpdp显然:dp[i][j]=∑x∗j≤Ndp[i−1][x]dp[i][j]=\sum_{x*j≤N}dp[i-1][x]dp[i][j]=∑x∗j≤N...原创 2019-07-04 23:49:38 · 409 阅读 · 0 评论 -
AC自动机初探
AC自动机AC自动机是kmpkmpkmp和TrieTrieTrie的结合,它处理了单串匹配多模式串的问题。之所以这么因为它引入了failfailfail指针处理相同后缀的信息,利用TrieTrieTrie处理多模式串的问题。从Trie的0结点开始往外延伸,对于每个结点都有自己的指针指向自己的后缀。后缀一定是小于自己的长度的,所以后缀的后缀事先应该是处理好的。先把所有模式串插入,再求fai...原创 2019-06-30 03:34:47 · 134 阅读 · 0 评论 -
回文树
回文树是一个很方便的解决回文串的问题。他可以求出本质不同的回文串个数。它的处理方式是这样:每次一个一个加入,每次加入字符的时候计算个数。它对每个回文串都存储了一个结点,属性为长度。通过每个回文串,以一条字母边可以指向新的回文串,新的回文串=旧的回文串在两侧加上该字母。每次找到当前字母结尾的最长的且能够满足新加入的字母和最边缘的字母(该回文串签一个字母)相同的最长回文串。寻找的过程是跳fa...原创 2019-06-30 03:34:56 · 245 阅读 · 0 评论 -
A*相关
网上很多的解析很详细(但我现在只是需要一个简单的板子,因为主要重心不在这里而是图论其他的简单部分的熟练应用。等到以后我会扩充。A∗A*A∗的核心在于估价函数,预估以后最应该走的路。所以我们实现求出每个点到终点的距离,每次bfsbfsbfs扩充,扩充的过程中不断增加路径长度,同时以f[node]=cost+d[node.to]f[node]=cost+d[node.to]f[node]=cost...原创 2019-06-04 17:15:46 · 120 阅读 · 0 评论 -
扩展kmp
利用到了kmpkmpkmp和manachermanachermanacher的部分思想。个人理解只能称的上是部分。扩展kmp处理的是:对于一个串T,串S每个后缀和串T的最长公共前缀。对于一个串S[1…10],T[1…100]。如果已经匹配到了S[1…10]=T[1…10].且S[1…5]=S[2…6]。[以上为条件]容易得到:S[2…6]=S[1…5]=T[1…10]。这正是利用到了...原创 2019-06-30 03:35:04 · 318 阅读 · 0 评论 -
Manacher:求最大回文子串
求最大回文子串ManacherManacherManacher算法。在求解回文子串时,分奇偶处理比较麻烦,manachermanachermanacher算法在每个字符两边加上一个"#""\#""#"通配符。可以把偶数回文子串和奇数回文子串都扩充成奇数回文子串# * # * #偶数情况,此时中心为## * # * #...原创 2019-06-30 03:35:11 · 125 阅读 · 0 评论 -
最短路的简单进阶(建图的优化)
这一篇描述了关于最短路的简单变式对于最后一道题,真正复杂度通过的做法是拆点。类似于网络流的拆点,不过这里的拆点,是为了使得处理边权信息得到可能。正常对点无法记录边权信息,我们可以考虑拆点将这样的信息暴露出来。对于每个点发出的颜色,相当于可以独立出一个点。到达这个点只会可以通过这个点直接到达另一个点(不需要花费)。有三个点u,v,ku,v,ku,v,k,对于这三个点有两条边且颜色都是cc...原创 2019-06-30 03:35:43 · 207 阅读 · 0 评论 -
Trie树_初章
Trie树LRJLRJLRJ白书字典树学习总结我们常常用TrieTrieTrie[也叫前缀树]来保存字符串集合。从根节点到每个单词结点的路径上所有字母连接而成的字符串就是该结点对应的字符串。根节点标号为0,其余结点编号为从1开始的正整数。具体来说,用ch[i][j]ch[i][j]ch[i][j]表示结点iii的编号为jjj的子结点。这里我们把编号从0−250-250−25分别对应26...原创 2019-06-30 03:35:24 · 120 阅读 · 0 评论 -
最小字典序欧拉路径
欧拉路就是所有边都走一次,也只走一次。欧拉回路就是能够回到起点,欧拉路径没有这么多要求。算法本质是这样的:从起点开始,尽可能地不去走桥(走完之后会把图分成两半),而去走其他边,这样的输出是欧拉路径。但是判桥的过程较为麻烦,我们可以采取这样的手段。如果起点开始有两条边,一条边是应该走的边,另一条是桥。如果我们采用dfsdfsdfs的方式先遍历到底,直到无路可走的时候才加入答案栈中,我们容易...原创 2019-06-30 03:35:55 · 642 阅读 · 0 评论 -
网络流最大流的基础问题
对于网络流的最大流,实际上求的是从s−>ts->ts−>t的最大流量,也就是输入sss,最多有多少能到ttt。这里引入残量网络的概念,就是容量减去已经使用的流量。(可以理解为一秒钟使用的流量)做法是(1)不断去求增广路,增广路就是一条路径:s−>t:s->t:s−>t,但是每条边都是有剩余流量的(走之前)。(2)每次求出增...原创 2019-05-29 23:23:10 · 402 阅读 · 0 评论 -
数值型数据的表示
又闹分手qwq想死啊(真分了 我这篇文章还没写完 - 还没写完 就又回来了QAQ开心 好好努力!) 一个数值型数据的完整表示包含三方面:(1)采用什么进位计数制,通俗地讲,就是逢几进几;(2)如何表示一个带符号的数,即如何使符号数字化,这就涉及机器数的编码方法,常用的有原码和补码。(3)小数点应该如何处理,有两种方法,即定点和浮点表示。1.进位计数制:(S)r=XnR^n+Xn...原创 2018-10-12 22:48:37 · 7228 阅读 · 1 评论 -
博弈论初章
只是起个头,第一次遇到这样的题目,虽然很简单,但是等到闲下来一定去好好研究类似的问题。毕竟暑期集训好像有考过。P3150 pb的游戏(1)题意:你能够分割一个数成两半,另一个人挑一半继续分割,直至有个人不能分就输了。1是必败态,2是必胜态。假设你拿的是偶数,你分成偶数=奇数+奇数,对面只能拿奇数,并且分成奇数+偶数;这个时候你继续只拿偶数,分成奇数+奇数,分到不能再分输...原创 2018-09-22 01:39:34 · 187 阅读 · 0 评论 -
洛谷P1308 统计单词数— —string类的灵活使用
P1308-统计单词数题意很简单,就是给定一个单词a,给定一个长句b,在b中找到单词a出现的次数并输出第一次单词a出现的位置(首字母的位置),如果找不到就输出-1. 暴力查找就可以过。只是需要考虑空格数量的位置,就不能使用cin和%s的scanf,必须单个字符读取。#include<cstdio>#include<cstring>#include<i...原创 2018-08-22 18:39:41 · 336 阅读 · 0 评论 -
洛谷P1028-数的计算
洛谷P1028 数的计算题意:对于一个n,问:实现以下操作之后得到的数有多少个,包括自己。往n左边加上一个小于n的一半的数。以此类推至不能加为止。暴力递推很容易理解,只需要注意加上自己。然后加上自己数的一半。要想不超时,就需要进行记忆化搜索。递归:#include<iostream>#include<cstdio>#include<cst...原创 2018-08-26 20:42:13 · 423 阅读 · 0 评论 -
洛谷【P1980】计数问题
题目链接:https://www.luogu.org/problemnew/show/P1980题意给你一个n,x,判断从1到n中数字x出现了多少次(PS:x是0~9)第一种办法:暴力枚举从1~n,每一个数都列出所有位。复杂度最大n*7,没有超标#include<cstring>#include<algorithm>#include<cs...原创 2018-08-19 20:45:01 · 610 阅读 · 0 评论 -
快速筛素数(埃式筛+线性筛+Miller_Rabin算法)
在CF上做到一道核心是需要筛出1~n所有素数的题目,然后刚好又没学过,就学习了快速筛素数的办法,基础的n根号n的算法这里大家每个人都知道吧QAQ,就不讲了,好像还是C语言上机说过的题目。首先给大家介绍一下一个比较简单的判断素数的方法:利用性质:大于等于5的质数一定和6的倍数相邻。 bool isPrime(int num){/*不在6的倍数两侧的一定不是质数*/if(num==1...原创 2018-08-18 20:20:01 · 4266 阅读 · 0 评论 -
状压DP入门
状压DP:神奇的DP方式,简单来说就是用二进制来简单压缩状态,然后根据题目可能会有一点点改变。但是不一定是用二进制,还有一些以压缩状态为思想的题目。首先参考:https://blog.csdn.net/Stockholm_Sun/article/details/78213290http://www.cnblogs.com/Ronald-MOK1426/p/8451875.htm...原创 2018-08-12 22:47:33 · 1709 阅读 · 0 评论 -
二进制位运算的基本应用
因为最近在学习的过程中,二进制异或等操作上产生了较多的疑问。今天就来系统上地学习一下二进制位运算的操作。借鉴和简单转载:http://blog.sina.com.cn/s/blog_87b866180101lb55.htmlhttps://blog.csdn.net/qq_30076791/article/details/50571194https://blog.csdn.ne...转载 2018-07-28 00:07:18 · 2312 阅读 · 0 评论 -
最短路径第一章:简要代码及其总结
BFS广度优先搜索框架就不给了,因为主要是一种思想。BFS队列把一层跑完放进去,再跑第二层,直到最后一层。一道简单的题目:洛谷:字符变换(虽然看了题解才过了)就是暴力枚举每一个可以替换的地方,BFS遇到第一个满足条件的就退出一定是最短路径,最少步数。https://www.luogu.org/problemnew/show/P1032#include<iostr...原创 2018-08-26 00:29:09 · 292 阅读 · 0 评论 -
HDU 1394+codeforce 459 D— —归并排序 简单离散化 线段树 树状数组— —求逆序列。
HDU 1394题意:第一个数可以放到最后一个后面,在随意多少个这样的操作或者不操作的情况下,问逆序列最少有多少个。模拟一下这个操作,由于这道题只有0~N-1,所以就更加方便了。对于第一个数A[i],比A[i]小的数一定在后面,所以以A[i]为前的逆序列有A[i](从0开始的),放到后面之后,比A[i]大的有n-1-A[i]个,也就是多出了这么些的序列,总共变化位-A[i]+n-1-A...原创 2018-07-22 10:38:11 · 192 阅读 · 0 评论 -
暴力搜索出奇迹— —第一场:答案数据较小
这里讲的这种暴搜是让题目不那么烦琐换种思路来解的一种方式。B - 俾斯麦设 f(n) 表示 n 的每一位数字的平方之和,求 [a,b] 中有几个 n 满足 k × f(n)=nInput第一行三个正整数 k, a, b1 ≤ k, a, b ≤ 1018,且a ≤ bOutput输出一个非负整数,表示解的个数 Sample Input5 10 20Sa...原创 2018-07-28 20:51:57 · 431 阅读 · 0 评论 -
数位DP入门
数位DP还是一个比较神奇的东西,主要是一种思想,这种思想就是UESTC 2018 DIV 6 B、C+简单入门题+自幂数(先放着过几天集体写一下:今天得写点数据结构和图论的东西,最短路放了好几天了)...原创 2018-07-28 19:49:31 · 245 阅读 · 0 评论 -
莫队算法
借鉴:大佬1、大佬2通过对离线问题的处理是莫队算法的核心数据结构简化操作一:优化通过对a[L-1]和a[R+1]的值对答案的影响的处理,来扩大区间如果[L,R]要变成[l,r],需要判断|l-L|+|r-R|,也就是曼哈顿距离。数据结构简化操作二:分块。分成根号n个块,把所有询问按左端点放进各自的块内,对于每个块按右端点排序。考虑总体复杂度:对于每个块内右端点的移动...原创 2018-07-28 15:57:55 · 1028 阅读 · 0 评论