01 2018 档案
摘要:这个题我们首先可以dp,f[i][j]表示前i个科目恰好碾压了j个人的方案数,然后进行转移。我们先不考虑每个人的分数,先只关心和B的相对大小关系。我们设R[i]为第i科比B分数少的人数,则有f[i][j]=sum f[i-1][k]*C(k,j)*C(n-1-k,R[i]-j) (k>=j) 怎么解
阅读全文
摘要:对于第一问直接n^2dp计算 第二问建图跑网络流 第三问将起始与结尾流量开大 建边的时候要严格按照子序列求法建 By:大奕哥
阅读全文
摘要:对于每个单位连源点到其的边,流量为单位人数 每个单位对每个桌子连边,流量为1 每个桌子对终点连边,流量为桌子人数 判断最大匹配是不是为总人数 By:大奕哥
阅读全文
摘要:最大权值匹配,贪心匈牙利即可。 检查一些人是否能被全部抓住可以采用左端点排序,右端点优先队列处理。 By:大奕哥
阅读全文
摘要:跑最大费用最大流,把每个点拆开边权为1花费为1,连边时边权为1花费为0 开头和结尾单独处理边权为2. 字符串用map记录然后两遍dfs出结果即可。 By:大奕哥
阅读全文
摘要:学习了半平交面。 我这里写的是训练指南中的双端队列,每次判断是否删去更优然后更新。 看hzwer中有一处不太明白就是为何要将两段加入队列 后来对拍出错才知道是因为精度,当两线重合时他们叉积返回值是一个极小值 所以判断一下精度即可。
阅读全文
摘要:贪心。 每次将最后一个非零位加一判断即可。 一开始想少了,只关心把最后一位变成5了,其实可以都变的。
阅读全文
摘要:这题状压DP太神了。 g[i][j][k]表示前i-1个人都已打到饭,自己和后七个人打饭的情况是j,当前最后一个打饭的与i的关系是k 如果j&1==1说明当前这个人也打了饭,那么可以转移到g[i+1][j>>1][k-1]因为i+1+k-1==i+k 然后我们再枚举当前哪个人要打饭计算状态即可。 学
阅读全文
摘要:其实每个柱子就相当于最小路径覆盖中的一根柱子。 我们要在有n条路径的最小覆盖中加尽量多的点。 所以我们枚举答案加边即可。 By:大奕哥
阅读全文
摘要:DAG的最小不相交路径覆盖 算法:把原图的每个点V拆成Vx 和Vy两个点,如果有一条有向边A->B,那么就加边Ax−>By 。这样就得到了一个二分图。那么最小路径覆盖=原图的结点数-新图的最大匹配数。 证明:一开始每个点都是独立的为一条路径,总共有n条不相交路径。我们每次在二分图里找一条匹配边就相当
阅读全文
摘要:题目一开始看以为和强联通分量有关,后来发现是无向边,其实就是求原图的补图的联通块个数和大小。学习了黄学长的代码,利用链表来优化,其实就是枚举每一个人,然后把和他不相连的人都删去放进同一个联通块里,利用bfs来实现。——by VANE
阅读全文
摘要:推荐学习WJMZBMR《重量平衡树和后缀平衡树在信息学奥赛中的应用》 转自hzwer: 在替罪羊树每个结点放一棵包含该子树所有结点的权值线段树,也就是平衡树套权值线段树 1、由于外层是平衡树,那么就能实现插入一个结点:找到它的位置,在根到其路径上所有结点的线段树中插入这个值 2、查询区间第K大:找到
阅读全文
摘要:题意说的有问题啊。。。 应该是每种类型至少有p题,因为一道题可以向多个类型做贡献。 将源点向每题连流量为1的边,代表选一本 将每题向各种连流量为1的边,表示只能对其中一种有贡献 将每种向汇点连流量为需求的边。 记录答案第二种边判断即可 By:大奕哥
阅读全文
摘要:就是个A*,具体原理可以参考VANE的博文。 正解要手写堆,会被卡常,也许哪天我筋搭错了写一回吧。
阅读全文
摘要:挺神的这题,发现只有环和链两种情况 搜索时我们只考虑环的,因为链可以看成找不到分类的环。 当成链时大小是的最大值是各链长的和,最小值是3 当成环时最大值是各环长的gcd,最小值是大于3的最小的ans的约数 当有链有环时只有当环的gcd大于等于3时才有解,所以我们统计答案时要优先考虑环的情况,考虑链情
阅读全文
摘要:考虑DP f[i][j][k]表示一行到i一行到j共取k块最大值,类似于最长公共子序列n^2那种 注意相等时可以一起拿 By:大奕哥
阅读全文
摘要:求卡特兰数,h[i]=C(2n,n)/(n+1)
阅读全文
摘要:建模方式: 1 :构造一个图 N ,顶点有 Ii(1<=i<=n) , Ej(1<=j<=m) 以及一个源 S 和汇 T 2 :从源点出发,向每个实验 Ei 引出一条容量为 Pi 的有向边 3 :从每个仪器 Ij 出发,向汇点引出一条容量为 costi 的有向边 4 :每个实验分别向所需的仪器引出一
阅读全文
摘要:其实和网络流没啥关系。 按状态用二进制跑spfa。
阅读全文
摘要:一开始以为跑费用流,后来看了题解才知道可以按天建图。 1.从源点向每一天的地球链接一条INF 2.从每一天的月亮向汇点链接一条INF 3.从上一天的每一个节点向当天的对应节点链接一条INF(因为人们可以留在中转站等一等嘛) 4.针对每一艘飞船,获取其上一天的位置,再获取这一天的位置,在这两个点之间连
阅读全文
摘要:A*算法,也叫启发式搜索,就是设计一个预估函数,然后在搜索的过程中进行有序的搜索,我们设到目前状态的花费为f(x),到目标状态的估计花费为h(x),那么我们按照h(x)+f(x)排序即可,这道题里起点到目前的距离为f(x),目前到终点的最短路为g(x),然后进行暴力搜索即可。—— by VANE
阅读全文
摘要:一道挺好的树上莫队板子题,可惜存在版权无法提交了。 这里给出代码供大家参考,分块操作类似于王室联盟,转成序列后和普通莫队一样。 By:大奕哥
阅读全文
摘要:想学树上莫队结果做了个树分块。 看完题后想到了菊花图的形状认为无解,结果仔细一瞧省会可以在外省尴尬 对于每一颗子树进行深搜,一旦遇到加在一起大小达到B则将它们并为一省,因为他子树搜完以后没有分出块的大小是小于B的,而且他自己当前剩下的也是小于B的,所以可以放心和。 最后剩下的点肯定也小于B所以与最后
阅读全文
摘要:点分治常数很大所以我们跑一遍即可。 用set记录。 一开始没有判q[i]==0惨惨了//
阅读全文
摘要:题目:一棵树,每条边有权.求一条路径,权值和等于K,且边的数量最小. 点分治,我们考虑经过根节点的路径,t[x]表示路径长为x时最少的边数,然后每次拿栈记下来清空。 注意先搜索再更新,这样可以避免同一子树内互相到达。 By:大奕哥
阅读全文
摘要:删边变为反向加边,一开始开了数组记录了边的编号,结果往下一翻才发现数据是加强版只得log的求编号了。 两点间最大路径最小值一定在最小生成树上。 先从小到大加边,然后就是裸的LCT了。 By:大奕哥
阅读全文
摘要:树上莫队和普通的序列莫队很像,我们把树进行dfs,然后存一个长度为2n的括号序列,就是一个点进去当作左括号,出来当作右括号,然后如果访问从u到v路径,我们可以转化成括号序列的区间,记录x进去的时候编号为f[x],出来时为g[x],然后分类讨论一下(f[u]<f[v]),如果u和v的lca不是u,那么
阅读全文
摘要:对LCT子树大小进行维护。 size表示实子树大小,sz表示虚子树大小。 具体操作是体现在link和splay中,可以看代码。 注意每次做完都要update。 By:大奕哥
阅读全文
摘要:ZHX的题目。 类似于HH的项链我们考虑最后加入哪一条边以后合并了两个联通块,所以我们边权从大到小排然后依次加入。找出最晚加入的,记成last。 然后做主席树就好啦! 注意拆边为点。 By:大奕哥
阅读全文
摘要:按a从小到大排序,然后按b建图。 每次只需要找1~n中最大的b加当前的a计算答案即可。 这里还有一个小操作就是化边为点,把一条边的边权看做一个点的点权然后多连两条边。 By:大奕哥
阅读全文
摘要:这题可以用分块暴力做,这里给出正解LCT的代码。 对于每一个弹射器i+k相当于i的父亲,大于n的全部归到n+1上。 这样对于修改操作就像于换了个父亲,我们要记录下上一次的父亲因为在splay中父亲可能会改变。 对于查询操作就相当于把n+1mroot到根,因为你添加时会更新,不能确保n+1的位置。 而
阅读全文
摘要:NOIP之前写过这题,先用的分块。 又采用了树状数组,离线按右端点排序,只关心最后一个出现的位置,如果有更新的则将原来的-1将新的位置+1 现在我又学了主席树,我们只要对于last(上一次的位置)建主席树,然后查询0~l-1这个区间出现的个数即可。
阅读全文
摘要:矩阵优化DP。 然而本题用到了骚操作,就是没有办法沿原路走回去,所以我们不能按临接矩阵dp,需要按照边建图 两边联通当且仅当a.from==b.to所以转移dp[i][j]=dp[i][k]*dp[k][j] 多少次就是多少次幂,然后加上与终点联通边的就是答案了。 By:大奕哥
阅读全文
摘要:Link-Cut Tree 把每个重链看成是一个splay mroot:将x整到splay根上,将这个splay上下左右翻转 这个根的左儿子是他上面的重链,右儿子是他下面的重链 access:将根(最最上面)到x的边看成一条重链 link:连接两点都到根上,再更新 cut:切除两点关系,先将x转到根
阅读全文
摘要:题目大意是这样的,给出n个点和m条边,每个边有一个流量的上下界,问是否存在一个循环的流量。这就是典型的无汇源点的上下界网络流,也就是循环流。做法是这样的,首先每条边我们都添加最少的流量,由于要满足流量守恒的条件,即每个点的流出量等于流入量,那么我们尝试进行修改,添加新的流量。我们记录一下每个点流出量
阅读全文
摘要:题目大意,给出两个字符串集合S和T,向T中添加字符串,查询S_i在T中有几个字符串出现过。一看这种多字符串匹配问题,我们联想到了AC自动机,做法就是,对于S集合我们建立一个AC自动机,建出fail树,fail树有一个很好的性质就是,对于一个节点x,它所对应的字符串是它子树中所有节点对应的字符串的后缀
阅读全文
摘要:绝世好题。 正当我犹豫不决时,hzwer说:“MAP!!!” 没错这题大大的暴力,生猛的stl,贼基尔爽,,ԾㅂԾ,, 由于我们求点名在名字中的子串个数,所以将点名建AC自动机,记录节点属于哪次点名,每次带着这位同学的所有名字去里面扫,注意判重 复杂度20000*100000以及玄学的stl复杂度。
阅读全文
摘要:学习了FFT用来求多项式的乘法,看了算导上的介绍,上面讲的非常明白,概括一下FFT的原理就是,我们在计算多项式的乘法时,如果暴力模拟的话是n^2 复杂度的,就像小学学的竖式乘法一样,比如一个n位数乘上一个n位数,我们需要用竖式乘法计算要列n行,每一行有n个元素,然后相邻两行错开一位(很显然,竖式乘法
阅读全文
摘要:询问x这个串在y中出现的次数。 fail数组有一个性质就是一旦a的fail指向b那么b所代表的字串一定是a的后缀。 所以我们看fail树(即按fail反向建树)中x的子树有多少y的结点即可。 这个操作可以使用树状数组维护dfs序操作。 By:大奕哥
阅读全文
摘要:找到了一个不错的题,题目中说要让路径异或和最大,考虑由于路径非常复杂,所以不太可能按照某一路径进行dp,一般对于异或和的操作我们进行线性基,最后答案的路径一定是一条从1到n的路径加上几个环构成,我们dfs找出环来,记录每一个环的异或和,我们可以随意选取一条从1到n的路径当作初始答案去进行线性基,因为
阅读全文
摘要:我们不能让重复过的字串出现在无限串上(就叫这个了。。。) 也就是要自动机一直能匹配但就是匹配不到,那么就是在自动机上找一个环。 dfs判环即可。注意是个有向图。
阅读全文
摘要:直接统计答案,要是统计相同个数呢?不清零即可。
阅读全文
摘要:一开始以为是个线段覆盖,后来仔细一读才发现有固定的结束时间。 类似于线段覆盖按右端点排序,使劲往里加然后加不了就用现在的换,使得所用时间尽量短。 PS:VANE最近回家养老了,只有大奕哥来撑场子了。
阅读全文
摘要:可以联想到矩阵的线性相关。 根据题意得出所求的合金应该是在材料的一个凸包内。 而要求是凸包的边尽量少。 建图跑floyd最短路。 每次判断点是否都在线段左侧,第二个判断是判断共线时点是否在线段上。 By:大奕哥
阅读全文
摘要:首先很显然的是,对于多组置换他们的周期就是置换长度的lcm 且长度之和等于n 而这些置换长度可能是多个px^ax的乘积,由于都是正数且都大于1所以乘积肯定比加和大 性质:若p1^a1+p2^a2+...+pm^am<=n①,则ans=p1^a1*p2^a2*..*pm^am②是n的一个可行答案。 如
阅读全文
摘要:我们要求∑k%i 可以化简为∑n*k-i*(k/i) 所以问题在于如何求∑k/i*i 数据范围1e9,想一想O(n)不可做 加入n=k=15 i= 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 k/i=15 7 5 3 3 2 2 1 1 1 1 . . . . . . .
阅读全文
摘要:dp模拟即可。 d[i][j][k]表示使用前i种面值,1号手里钱为j,2号手里钱为k时最少操作数 使用滚动数组压缩空间
阅读全文
摘要:做到了AC自动机的题目,复习了一下AC自动机,学习了黄学长代码,这个题呢,我们可以模拟在AC自动机上的操作,dp数组f[i][j]表示前i个字符,我们在AC自动机上处在j号节点的方案数。 我们可以计算不符合条件的方案数,转移的时候不在有标记的节点转移就行了。—— by VANE
阅读全文
摘要:01分数规划。 我们知道01分数规划有两种解法,一种是二分,一种是迭代。 先讲讲思路。 R=sigma(a[i]*x[i])/sigma(b[i]*x[i]),F(L):=sigma(a[i]*x[i])-L*sigma(b[i]*x[i])=sigma(d[i]*x[i]);d[i]=a[i]-b
阅读全文
摘要:辣鸡POJ输出只能写%.0f 今天做bz时扫到了01分数规划,就来写一写 式子就是R=sigma(a[i]*x[i])/sigma(b[i]*x[i]) 我们先定义一个函数F(L):=sigma(a[i]*x[i])-L*sigma(b[i]*x[i]),显然这只是对目标式的一个简单的变形。分离参数
阅读全文
摘要:定义f[i][j]为将i柱上的j个盘挪走(按优先级)的步数 p[i][j]为将i柱上的j个盘按优先级最先挪至何处 首先考虑一定p[i][j]!=i 设初始为a柱,p[i][j-1]为b柱 考虑两种情况,已经挪走的这j-1个盘如果挪到区别于这两柱的c柱,那么就是经典的汉诺塔,所以只能动底盘到c柱,其他
阅读全文
摘要:两天总算刷完了这六题,也算是有些收获吧。 先来说说建图的问题,之前我们可以看到都是建两条边,而这题得建四条边,为什么呢? 因为根据实际情况考虑吧他们前后都有可能。 所以在这里我们要得出结论,2-Sat题目就如同网络流,差分约束一样,根据题意给出的限制条件建图。 然后再说说这个tarjan,作用是用来
阅读全文
摘要:2-sat,我们想对于一对钥匙关系应该是a&b=0即不能同时选 对于一扇门而言应该为a|b=1即要至少选一个 建图二分即可 By:大奕哥
阅读全文
摘要:2-sat 建图就可以把男女对立看为2-sat的初始状态,i为男的和新娘在一排,i+n为男的和新娘在对立排。只关心是不是都在新郎这一边就可以了。 由于一开始新郎和新娘对立所以连一条0到0+n的边 改了一上午,最后发现s没清空つ﹏⊂ By:大奕哥
阅读全文
摘要:好好写2-sat 如果a1-->b1矛盾则连边a1-->b2和b1-->a2 我定了一个ccnt和cnt变量,结果少打一个c,wa了好多次(lll¬ω¬) By:大奕哥
阅读全文
摘要:本题可以看出来是2-sat。 难点在于输出一种可行解。 我们想tarjan在这里的作用是什么?缩点。 何为缩点,即把点都放到一个强连通分量里视为一个块,然后对块跑拓扑即可。
阅读全文
摘要:开始学习2-sat的姿势 http://blog.csdn.net/jarjingx/article/details/8521690 这篇文章写的真好 算法的过程如下: 构图 更具体的后面再说缩点 Tarjan算法缩点,将所有的边反过来( 为什么?后面有嗯 )判可行 枚举集合的两个元素,看其是否处于
阅读全文
摘要:这题上来看以为是dp,其实是搜索,我顺便把搜索的路径存下来了(这样才看明白样例......)。 —— by VANE
阅读全文
摘要:看到博弈论,大力推一下sg,发现和NIM一样嘛,sg(x)=x,然后发现sg(1)和sg(0)有点怪,然后发现sg带进去不对,发现如果石子全是1的话就不对,然后一脸懵逼,开始质疑sg的正确性,找到了题解发现是sj函数!!果然是我土鳖了,看了一下论文,这个问题是Anti-NIM游戏,是由JZH提出的结
阅读全文
摘要:对于并查集我们有两种优化 一、按秩合并 描述:就是在对两个不同子集连接时,按照rank来连,也就是rank低的连在rank高的下面。rank高的做父亲节点。 作用,这样类似维护了一棵树,树是rank高的在上。 二、路径压缩 描述:假如fa数组已经嵌套了N层,那么传统的做法去找祖先要做N次,当N很大时
阅读全文
摘要:定理,在所有最小生成树中,相同边权的边出现的次数相同。 由于重复边权小于10条,可以跑2^10暴力
阅读全文
摘要:转一发blog 首先看这道题的博弈部分,也就是如何得到答案。对于单个节点来说,这就是一个简单的巴什博弈问题,每次可以拿走[1..L]个的话,只需要把石子个数对L+1取模就可以得到它的SG值了。如果考虑树上操作这就是一个阶梯博弈,每次只需要考虑奇数层上的石子。那么只需要对每棵子树维护它的奇数层SG值和
阅读全文
摘要:我们可以使用二分答案来计算。 至于添加和修改操作我们可以使用Splay来维护复杂度O(mlogn)当然Splay常数很大。 BZOJ上长时间TLE,有dalao可以帮忙看看,luogu上能过。加个inline就行了。
阅读全文
摘要:Splay维护操作。 学习了一个很好的remove操作。
阅读全文
摘要:题目很好明白,然后实现很神奇。首先如果考虑并查集的话,对于删边和加边操作我们无法同时进行。然后暴力分块的话,复杂度是O(n sqrt n) ,不是很优。于是看了题解,发现了线段树的神奇用途。 我们维护每个矩形四个顶点的六个变量,分别是: g[0]:表示第一行左右端点的连通性。 g[1]:表示第二行左
阅读全文
摘要:Splay 与之前不同的是如果你仅仅是翻转左右区间的话可以在find里面做因为对他有影响的子树在做之前一定在他的上面从上到下搜索的过程可以把rever做了。 但这道题要求我们输出转换之前的,因此不能保证之前的rev标记都已执行完因此就要从上到下做一遍。 By:大奕哥 这个是标准的按照序列中的位置建树
阅读全文
摘要:一道背包的神题,用到了树上dp和背包dp,这个题的特殊性在于儿子对于父亲节点是有影响的,所以用f[i][j][k]表示第i号装备,其中用j个来合成上层装备,花费k元所能获得最大的力量值。 然后对于每一个节点枚举我选择合成几个,遍历每一个儿子节点,背包dp一下花费k元的最大力量值。注意这里的背包是一个
阅读全文
摘要:裸的splay模板题。 支持修改,最值,翻转操作。 注意pushdown中写法。 By:大奕哥
阅读全文
摘要:学习hzwer的代码。 http://hzwer.com/2841.html 这是一道经典的splay模板题 入门建议阅读《伸展树的基本操作与应用》,以及手画练习 以下模板是结合前人经验,经多次修改后的结果 c分别是结点左右儿子,fa是结点父亲 size是子树大小,sum是子树权值和,v是结点权值,
阅读全文
摘要:继续splay 我们删除和加点都要用splay维护 这样直接利用搜索树的性质模拟即可。
阅读全文
摘要:复习一波splay算法。 先来一道模板题,多开两个哨兵节点便于我们将l-1转到根上,r+1转到l-1的右子树上,这样反转的区间就是根的右子树的左子树。 类似线段树开懒标记,每次操作复杂度O(logN) By:大奕哥
阅读全文
摘要:正着显然不可做,我们采取反向并查集,将删点改为加点,每次贪心的认为加了一个联通块,一旦不符就减一。
阅读全文
摘要:令球心坐标为x1,x2...xn,假设当前第i个点坐标为a1,a2...,an,第i+1个点坐标为b1,b2...,bn,则由半径相等可得: (a1-x1)^2+(a2-x2)^2+...+(an-xn)^2=(b1-x1)^2+(b2-x2)^2+...+(bn-xn)^2 化简可得: 2(a1-
阅读全文
摘要:数据范围2000,我们如果枚举对角线然后走呢,是不是n^3呢,仔细一想不是。 因为面积是一个单增的过程,所以建完凸包以后枚举对角线复杂度就是n^2的。 因此这题我们就从一个四边形面积转化为两个三角形面积。 By:大奕哥
阅读全文
摘要:建回文树。 cnt*len取max。 By:大奕哥
阅读全文
摘要:建回文树。 正反建统计一种前缀和求出所有不相交的,用总数减去就是答案数。 在这里我们可以知道一个字符串中所有回文串的个数即为num数组之和(因为以一个节点为回文串结尾的字串都是唯一的) 也可以是cnt数组的和(想想看为什么) 题目链接:http://www.tsinsen.com/ViewGProb
阅读全文
摘要:建回文树,然后判断长度奇偶性,统计下来排序即可。 题目链接:http://www.tsinsen.com/ViewGProblem.page?gpid=A1255 By:大奕哥
阅读全文
摘要:求最长双回文串,正反建回文树求最大。 题目链接:http://www.tsinsen.com/ViewGProblem.page?gpid=A1280 By:大奕哥
阅读全文
摘要:回文树,也叫回文自动机,是2014年被西伯利亚民族发明的,其功能如下: 1、求前缀字符串中的本质不同的回文串种类 2、求每个本质不同回文串的个数 3、以下标i为结尾的回文串个数/种类 4、每个本质不同回文串包含的本质不同回文串种类 (本文参考自Palindromic Tree——回文树【处理一类回文
阅读全文
摘要:题目是给出一个字符串,每次询问一个区间[a,b]中所有的子串和另一个区间[c,d]的lcp最大值,首先求出后缀数组,对于lcp的最大值肯定是rank[c]的前驱和后继,但是对于这个题会出现问题,就是题目中有区间的限制。 For example: 5 1 aaaab 1 2 3 5 对于这个样例,如果
阅读全文
摘要:单调栈存储最大值位置。 由于单调下降所以查找第一个大于当前查询位置的数即可。
阅读全文
摘要:证明axb的模是a,b为邻边的平行四边形面积:http://www.docin.com/p-634375594.html 在一个二维平面上距离最远的两个点一定在凸包上。 求凸包这里给出 Graham扫描法 时间复杂度:O(n㏒n) 思路:Graham扫描的思想和Jarris步进法类似,也是先找到凸包
阅读全文
摘要:https://segmentfault.com/a/1190000008663857
阅读全文
摘要:爬山。 爬山算法即是模拟爬山的过程,随机选择一个位置爬山,每次朝着更高 的方向移动,直到到达山顶,即每次都在临近的空间中选择最优解作为 当前解,直到局部最优解。这样算法会陷入局部最优解,能否得到全局 最优解取决于初始点的位置。初始点若选择在全局最优解附近,则就可 能得到全局最优解。 http://w
阅读全文
摘要:随机化算法。 A*B==C那么X*A*B==X*C 降到了n*n复杂度。 多次随机X判断即可。 By:大奕哥
阅读全文
摘要:随机化算法。 亲身试验贪心会T。 所以排序,然后在前2*k个数中随机交换。 祝大家新年快乐。
阅读全文
摘要:这两天后缀数组整多了整点有意思的,随机算法。 题意给你两个数组,让你求一个排列使得这个排列对应的两个数组前n/2+1个数之和的二倍大于每个序列总和。 下面先贴下这题正解 二维贪心,按a从大到小排,把第一个拿着,以后每两个里面选一个a的性质可以满足。 b的话就在两个里面选一个b较大的,这样可以保证有一
阅读全文
摘要:后缀数组。 复习了后缀数组后发现这题真的很好写。 我们只需要将c依次向前向后扩展,找落在[a,b]区间内的最大值,遍历过程中不断用height数组更新。 复杂度就是后缀数组,比主席树的快多了。 By:大奕哥
阅读全文
摘要:KMP+矩阵快速幂+DP; 按顺序处理准考证号每一位, 设f[i][j]表示:准考证号前i位中 后j位与不吉利数的前j位相同时,前i位的方案数 那么答案ans=f[n][0]+f[n][1]+…+f[n][m-1] 状态转移: f[i][j]只能由f[i-1][k]得到,相当于填完第i-1位后,将其
阅读全文
摘要:题意:给定一个串,长度<=10^5,求它重复次数最多的连续重复子串(输出字典序最小的那个)。 例如ccabcabc,答案就是abcabc。 枚举长度然后往前往后搜即可。 这题最好的一点就是在进行枚举时只需要固定点枚举即可因为答案一定经过这几个点。 复杂度n/1+n/2+...n/n=nlogn By
阅读全文
摘要:后缀数组。 求多个字符串翻转与否中最长公共子串长。 二分答案,反过来多建一倍的字符串,二分时特判一下即可。 By:大奕哥
阅读全文
摘要:后缀数组。 解决多个字符串的最长公共子串。 采用对长度的二分,将子串按height分组,每次判断是否在每个字符串中都出现过。 复杂度O(NlogN) By:大奕哥 Ps:wa了好多遍,因为插进去的ascII码值没有选好,附一张ascII表。
阅读全文
摘要:后缀数组+单调栈。 与之前那题非常类似,我们依旧是采用height数组对答案进行计算。 非常强的操作,我们分别对b匹配a,对a匹配b。我们会发现他的height会越匹配越小,所以我们建立单调上升的栈来存下a串中相同的,然后一旦遇到小的就将他更新换掉,然后对答案统计计算,栈要再开一维计算之前有哪些高的
阅读全文
摘要:求两个字符串的最长公共子串,用后缀数组做一下 只要求Height数组即可,然后统计答案就行了。—— by VANE
阅读全文
摘要:从网上学习了后缀数组,抄了一份非常棒的代码 http://blog.csdn.net/yxuanwkeith/article/details/50636898 然后本题有了这个技能之后就很容易了,复制一份字符串,求出来SA数组,对于SA小于等于n/2的就是答案。—— by VANE
阅读全文
摘要:网络流。 我一开始傻傻的将每条边与每一列连边,边权为联通块树,但是这样做是错的因为我们就在跑网络流中会忽略掉边和列的关系。 我们在做网络流题时一定要注意题目中给出的限制条件,一定要以限制条件建图!!!! 我们对每个联通块单独考虑,再在节点上对他所在的竖直联通块与水平联通块连线。
阅读全文
摘要:太棒了!思路很不错。 没想到HEOID1三道线段树。 这题我们可以二分答案,将小于他的在线段树中设成0,大于他的设成1然后模拟操作复杂度O(mlog^2n) By:大奕哥
阅读全文
摘要:可以用并查集,记忆化搜索,线段树多种方法实现。 我这里写的是依照dfs序建线段树,维护区间最大值。
阅读全文
摘要:按照斜率排序,我们可以想象如果你能看到大于等于三条直线那么他一定会组成一个下凸包,这样我们只需要判断如果当前这条直线与栈顶第二直线相交点相比于栈顶第二直线与栈顶直线相交点靠左那么他就不满足凸包性质。 画画图想想看。
阅读全文