随笔分类 - 基本算法 二分法
摘要:【题目】F. k-substrings 【题意】给定长度为n的串S,对于S的每个k-子串$s_ks_{k+1}...s_{n-k+1},k\in[1,\left \lceil \frac{n}{2} \right \rceil]$,找到满足[奇数长度][严格子串][同时是前缀和后缀]的最长子串。n<
阅读全文
摘要:【题目】AtCoder Regular Contest 092 D - Two Sequences 【题意】给定n个数的数组A和数组B,求所有A[i]+B[j]的异或和(1<=i,j<=n)。n<=200000。 【算法】二分+模拟 【题解】将答案分成(A[i]+B[j]-A[i]^B[j])的异或
阅读全文
摘要:【题意】给定n棵高度初始为0的草,每天每棵草会长高a[i],m次收割,每次在d[i]天将所有>b[i]的草收割到b[i],求每次收割量。n<=500000。 【算法】线段树上二分 【题解】按照生长速度a[]排序后,容易发现数列永远单调。 在线段树上的区间维护以下值: 1.最后一棵草的高度a 2.上次
阅读全文
摘要:【题意】定义f(A,B)为一个字符串,满足: 1.长度为A+B,含有A个‘A',B个'B'。 2.最长的相同字符子串最短。 3.在满足以上2条的情况下,字典序最小。 例如, f(2,3) = BABAB, and f(6,4) = AABAABAABB. Q次询问f(Ai,Bi)的子串[Ci,Di]
阅读全文
摘要:【题目】B. Robin Hood 【题意】给定n个数字的序列和k次操作,每次将序列中最大的数-1,然后将序列中最小的数+1,求最终序列极差。n<=5*10^5,0<=k<=10^9,1<=ai<=10^9。 【算法】模拟 【题解】关键在于,增加和减少可以分开操作。 将数列排序,从小到大增加前面若干
阅读全文
摘要:【题目】C. Weakness and Poorness 【题意】给定含n个整数的序列ai,定义新序列为ai-x,要使新序列的最大子段和绝对值最小,求实数x。n<=2*10^5。 【算法】二分||三分||计算几何(凸包) 【题解】Editorial 令正数最大子段和为A,负数最大子段和为B,绝对值是
阅读全文
摘要:【题意】n个点的树,1为根,要求删除一些点使得截断根节点和所有叶子结点的路径(不能删根,可以删叶子)。有m支军队在m个点上,每时刻所有军队可以走一步,最终走到的地方就是删除的点,求最短时间。 【算法】二分,贪心,倍增 【题解】 所有点同时走路,求最短时间,这样的询问通常考虑二分转化为判定性问题。(实
阅读全文
摘要:【题意】将n*m矩阵分成两个区域,要求满足一定条件,求两区域内部极差较大值最小。n,m<=2000 【算法】二分 【题解】极差的数值满足单调性,所以考虑二分极差。 对于给定的极差,将所有数值排序后,1~a[n*m]-num-1必须选择A,a[1]+num+1~n*m必须选择B,其它不要求。(开始的时
阅读全文
摘要:【题意】给定n*m的数字矩阵,要求横着切A-1刀,对每块再分别竖着切B-1刀,是最小子矩阵最大。 【算法】二分+贪心 【题解】还记得提高组2015跳石头吗?这道题做法一致,只不过拓展到二维而已。 二分最小子矩阵值,考虑行,对于每一刀贪心一行一行拓展到能切马上切。 对于行贪心中得到的若干行,通过列贪心
阅读全文
摘要:【题意】n个点的树,m条链,求将一条边的权值置为0使得最大链长最小。 【算法】二分+树上差分 【题解】 最大值最小化问题,先考虑二分最大链长。 对所有链长>mid的链整体+1(树上差分)。 然后扫一遍,对[在所有不满足链上]的边取最大值并check。 具体做法:对于二分的最大链长,将所有链长>mid
阅读全文
摘要:【算法】高斯消元-异或方程组 【题解】良心简中题意 首先开关顺序没有意义。 然后就是每个点选或不选使得最后得到全部灯开启。 也就是我们需要一种确定的方案,这种方案使每盏灯都是开启的。 异或中1可以完美实现取反。 故令xi表示第i盏灯的开关情况,然后对每盏灯的亮灭列方程,即 (1*x1)^(1*x2)
阅读全文
摘要:【算法】二分+矩阵快速幂 【题意】给定矩阵A和整数k,MOD,求A^0+A^1+A^2+...+A^k。 【题解】 定义题目要求的答案为f(n),即: $$f_n=\sum_{i=0}^{n}A^i$$ 当n为偶数时,可以拆成两半,后一半由前一半集体乘A(n/2)得到,即: $$f_n=f_{\fr
阅读全文
摘要:【算法】二分+贪心 【题意】转换模型后大概是:给定n,T,n个数字和n个坐标,自行选择一个起点,从起点往最近的数字跑一次往返拿回1,T为最长距离限制,求至多拿多少数字。 【题解】 比赛题解:http://vfleaking.blog.uoj.ac/blog/43 对于每个点从左到右,其能取的左右区间
阅读全文
摘要:【算法】二分+有源汇上下界可行流 【题解】上下界 题解参考:[BZOJ2406]矩阵(二分+有源汇有上下界的可行流) #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int inf=0
阅读全文
摘要:【算法】二分+spfa 【题解】据说这个叫分数规划? 0-1分数规划 二分答案a,则对于任意的环有w/k≤a即w-ak≤0,若满足条件则a变小,否则a变大。 因为w=w1+w2+...+wk,所以变形为(w1-a)+(w2-a)+...+(wk-a)≤0。于是问题转化为在图中找负环。 不过由于spf
阅读全文
摘要:【算法】二分查找 【题解】最小值最大化问题。 从1..l内二分枚举答案,将每个答案最少移开的石头数与最大移开数m比较。 精简写法学自:https://vijos.org/p/1981/solution(核糖核酸) #include<cstdio> #include<algorithm> using
阅读全文
摘要:【算法】线段树||二分+前缀和 【题解】线段树记录区间加值和区间最大值。 #include<cstdio> #include<algorithm> using namespace std; const int maxn=1e6; struct treess{int l,r,ms,delta;}t[m
阅读全文
摘要:【算法】 【算法】网络流 【算法】树 【算法】数学 ————【专题】生成树计数(矩阵树定理) ————【专题】计数问题(排列组合,容斥原理,卡特兰数) ————【算法专题】卡特兰数(计数数列) ————【专题】数论 ————【专题】概率和期望 【算法】动态规划 【算法】数据结构 ————【专题】平衡
阅读全文