摘要:
"Description" 思路 首先,求最大的最小值中的最大值本质是求最大值。 考虑用二分来枚举最大值是多少。假设枚举出了v,判断v是否可行。 将一行当中大于等于v的数设为1,小于v的数设为0。假设存在两行的01串可以互补成全1的串,说明存在最大值至少大于等于v,即v可行;反之不可行。 由于行数有 阅读全文
摘要:
介绍 计算字符串每个位置的最长回文串,也可以说是计算所有的回文区间。 原理 感觉算法思想和扩展kmp求extend数组十分类似。 先在第一个位置插入'$'以避免小于0的讨论,再在每一个字符之间都插入'#',为了避免对区间奇偶长度的讨论。 用len[i]代表位置i的最长回文右半区间的长度。由于经过上面 阅读全文
摘要:
介绍 Knuth-Morris-Pratt字符串查找算法(简称为KMP算法) 用于字符串的模式匹配。相比朴素算法,它的时间复杂度为O(n + m),其中n是文本串长度,m是模式串长度。 原理 kmp通过计算模式串的next数组作为辅助来减少朴素算法中重复的比对。 next数组代表模式串的最长相同真前 阅读全文
摘要:
作用 用于求一个串的字典序最小的循环串 原理 详见oi-wiki 最小表示法 算法思想是贪心。时间复杂度O(n) int findmin(char s[]) { //n为字符串长度 int k = 0, i = 0, j = 1; while (k < n && i < n && j < n) { 阅读全文
摘要:
"Description" 思路 根据题意,可以转换为在时刻x可以对原数组任意一个数加区间$[1, 2^{x} 1]$中的数。只要求出刚好满足非递减序列每个位置要加的最少值中的最大值所在的最小的x的区间即可。 阅读全文
摘要:
"Description" 思路 这题总觉得有些想法,但是就是写不出来。看了 "题解" 好久才想明白。(以下均图片来自cf "题解" ) 每个度数大于2的结点都是某些叶子结点的LCA,设这个结点为图中的C。虚线代表从叶子结点到C的路径,把路径上面的边全部合并,看成一条边。合并的边的权值就是路径上的边 阅读全文
摘要:
Description 思路 题目大意就是求满足$xw + yd = p$的x和y,其中$0 \leq x,y \leq n$。 先求出w和d的最小公约数m,如果m不能整除p则无解;否则全部提出m。然后就可以用扩展欧几里得求出x,y的可行值。 由$y \geq 0$ 可知 \(p-wx \geq 0 阅读全文
摘要:
"Description" 思路 对于D1的可以先按值排序,然后取前k个数按位置排序,取第p个的值。 对于D2,把询问全部存起来,按k排序。这样只要选取一种数据结构,可以快速地处理“一次插入一个值,求其中第p大的数”的问题。 这里可以选用树状数组来处理求第p大的数这样的问题。树状数组的位置x代表比x 阅读全文
摘要:
"Description" 思路 异或又叫做半加,它与和加法的区别就是不会进位。可知 $a+b=(a⊕b)+2(a\&b)$ $2(a\&b)$就是进位的部分的值。 对于这一题,$b_i=b_{i 1}⊕a_i$可以写成$b_i=b_{i 1}+a_i 2(a_i\&b_{i 1})$。 因为$b_ 阅读全文
摘要:
Description Given two strings s and t, count the number of tuples (i,j,k) such that 1. 1 ≤ i ≤ j ≤ |s| 2. 1 ≤ k ≤ |t|. 3. j − i + 1 k. 4. The i th cha 阅读全文