「HAOI2018」字串覆盖】的更多相关文章

「HAOI2018」字串覆盖 题意: ​ 给你两个字符串,长度都为\(N\),以及一个参数\(K\),有\(M\)个询问,每次给你一个\(B\)串的一个子串,问用这个字串去覆盖\(A\)串一段区间的最大收益是多少?(\(N,M\le100000,K\leq10^9\))其中,子串长度在\(51\)到\(2000\)的询问个数不会超过\(11000\)个. 题解: ​ 题目的暗示很明显,分类做. ​ 建出\(sam\),维护\(right\)集. ​ 对于询问大于\(50\)的直接暴力跳. ​ 对…
题解 写后缀树真是一写就好久,然后调好久QAQ 我们把两个串取反拼一起建后缀树,这样的话使得后缀树是正串的后缀树 然后我们把询问挂在每个节点上,每次线段树合并,对于大于50的每次暴力跳着在线段树找,对于小于50的建出一棵树来,也就是\(a[i][j]\)表示第\(i\)位往后\(j\)位,向下一个\(a[t][j]\)有\(t >= j\)连一条边 这是一棵树,在树上倍增就行了 说起算法来很容易吧!!!!写起来特别烦QAQ 代码 #include <bits/stdc++.h> #def…
1099 字串变换 2002年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold   题目描述 Description 已知有两个字串 $A$, $B$ 及一组字串变换的规则(至多6个规则): $A1$ -> $B1$ $A2$ -> $B2$ 规则的含义为:在$ A$中的子串 $A1$ 可以变换为 $B1$.$A2$ 可以变换为 $B2$ …. 例如:$A='abcd' B='xyz'$ 变换规则为: $‘abc’->‘xu’ ‘u…
[BZOJ5304][HAOI2018]字串覆盖(后缀数组,主席树,倍增) 题面 BZOJ 洛谷 题解 贪心的想法是从左往右,能选就选.这个显然是正确的. 题目的数据范围很好的说明了要对于询问分开进行处理. 先考虑询问的模板串长比较大的情况. 那么只需要每次找到一个范围内的最小位置然后接着暴力跳就可以了. 这个这个过程可以把\(AB\)两个串拼接在一起求\(SA\),这样能够匹配上\(P\)串的\(A\)的后缀的起始位置在\(SA\)上就是一段连续区间.考虑每次找出在\(A\)的\([l,r]\…
「HAOI2018」染色 是个套路题.. 考虑容斥 则恰好为\(k\)个颜色恰好为\(c\)次的贡献为 \[ \binom{m}{k}\sum_{i\ge k}(-1)^{i-k}\binom{m-k}{i-k}\binom{n}{si}\frac{(si)!}{(s!)^i}(m-i)^{n-si} \] 有两项最开始搞忘了..\(\binom{n}{si}\frac{(si)!}{(s!)^i}\)就是这两个 代表钦定\(si\)个位置去染,然后染色本身是个可重排列 设\(d=\min(\l…
目录 题目链接 题解 代码 题目链接 loj#2128. 「HAOI2015」数字串拆分 题解 \(f(s)\)对于\(f(i) = \sum_{j = i - m}^{i - 1}f(j)\) 这个可以用转移矩阵通过矩阵乘法处理出来 预处理出\(A[i][j]\)表示数S为\(j * 10 ^ i\)的转移矩阵 对于g的转移 \(g(i) = \sum_{j = 0}^{i - 1}g(j) * D(j + 1,i)\) D[i][j]表示第i位到底j位构成的数的f,(转移矩阵 对于g的转移也…
离线处理所有询问. 对于$r-l\leq 50$的情况: 按照串长从$1$到$51$分别把所有子串按照第一位字符为第一关键字,上一次排序结果为第二关键字进行$O(n)$基数排序. 同理也可以用上一次比较结果来判断这一次某两个子串是否相同. 对于每个询问,找到排序结果中对应的区间,在里面二分出起点$x$,问题转化为从$x$开始贪心会一直往右跳最终能跳过多少个位置. 继续离线,预处理出每个$x$的后继$f_x$作为$x$的祖先,DFS这棵树的时候在栈上二分即可. 时间复杂度$O(len\times…
题面 传送门 题解 字符串就硬是要和数据结构结合在一起么--\(loj\)上\(rk1\)好像码了\(10k\)的样子-- 我们设\(L=r-l+1\) 首先可以发现对于\(T\)串一定是从左到右,能取就取是最优的 我们先用后缀自动机\(+\)线段树合并求出自动机上每一个节点的\(endpos\)集合.如果\(L\)较大的时候,我们考虑二分找到第一个端点,再找下一个--这样在线段树上找的总次数是\({n\over L}\),复杂度为\(O({n\over L}\log n)\) 但是\(L\)较…
好像网上没人....和我推出....同一个式子啊..... LOJ #2527 Luogu P4491 题意 $ n$个格子中每个格子可以涂$ m$种颜色中的一种 若有$ k$种颜色恰好涂了$ s$格则产生$ w_k$的价值 求所有涂色方案的价值和 $ solution$ 按常规套路先容斥 设 $f_x$表示恰好有$ x$种颜色涂了恰好$s$格的方案数, $ g_x$表示至少有$ x$种颜色涂了恰好$ s$格的方案数 有 $ ans=\sum\limits_{i=0}^mw_if_i$ $ f_…
题解 简单容斥题 至少选了\(k\)个颜色恰好出现\(S\)次方案数是 \(F[k] = \binom{M}{k} \frac{N!}{(S!)^{k}(N - i * S)!}(M - k)^{N - i * S}\) 然后恰好\(k\)个颜色恰好出现\(k\)次就是 \(g[k] = \sum_{j = k}^{M} (-1)^{k - j} \binom{j}{k}F[j]\) 然后就是 \(g[k]*k! = \sum_{j = k}^{M}\frac{(-1)^{j - k}}{(j…
题解 这计数题多水啊我怎么调了那么久啊 我不想老年化啊QAQ (注意这里的二叉树带标号) 考虑\(g[i]\)表示\(i\)个点二叉树所有节点的深度和,\(f[i]\)表示\(i\)个点的二叉树两两节点之间的路径和 \(h[i]\)表示\(i\)个点的二叉树的方案数(实际上就是\(i!\)= =) 对于一个\(f[i]\)枚举左儿子大小\(j\),右儿子大小是\(i - j - 1\) 计算的时候就是 \(g[i] = \binom{i - 1}{j}(g[j] * h[i - j - 1] +…
题解 如果一个联通块是一个树的话,方案数就一种,如果这个联通块还有别的边,那选了一条别的边就会把树上对应路径全部取反,所以方案数是\(2^{m - n + 1}\) 如果联通块数为\(c\)方案数为\(2^{m - m + c}\) 一个联通块有奇数个黑点一定为0 然后就对于每个点判断是不是割点,是的话看看分成的联通块有几个包含奇数个黑点 然后如果不是割点看看删掉这个点后联通块黑点个数的奇偶性改没改变 同时要特判联通块里只有一个点的情况 代码 #include <bits/stdc++.h>…
题解 复杂度怎么算也要2s的题怎么0.5s就跑完了,迷啊 这个题简直算完复杂度不敢写,写了就赚飞了好吧 根据裴蜀定理,显然选出的数和P的gcd是w的约数 我们考虑枚举\(P\)的约数,上限当然是\(\sqrt{P}\)个,写个暴力搜一下发现最多也就13000个左右 然后我们把每个数处理成\(gcd(a_i,P)\) 重标号所有约数 那么我们写个\(n^2\)的\(dp[i][j]\)表示处理到第\(i\)个约数,然后这些数的\(gcd\)是第\(j\)个约数 然后再\(n^2\)将\(val[j…
题解 题中给的函数可以用矩阵快速幂递推 我们记一个数组dp[i](这个数组每个元素是一个矩阵)表示从1到i所有的数字经过拆分矩阵递推的加和 转移方法是 \(dp[i] = \sum_{j = 0}^{i - 1} dp[j] * tr[j + 1][i]\) \(tr[j][i]\)表示矩阵的\([j,i]\)组成的数字次幂是什么样的矩阵 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii pai…
原题链接 Description 求一个DAG的最小路径覆盖,并输出一种方案. Solution 模板题啦~ Code //「网络流 24 题」最小路径覆盖 #include <cstdio> #include <cstring> inline char gc() { static char now[1<<16],*S,*T; if(S==T) {T=(S=now)+fread(now,1,1<<16,stdin); if(S==T) return EOF;…
目录 题目链接 题解 代码 题目链接 loj#2574. 「TJOI2018」智力竞赛 题解 就是求可重路径覆盖之后最大化剩余点的最小权值 二分答案后就是一个可重复路径覆盖 处理出可达点做二分图匹配就好了 代码 #include<cstdio> #include<cstring> #include<algorithm> #define gc getchar() #define pc putchar inline int read() { int x = 0,f = 1;…
#6002. 「网络流 24 题」最小路径覆盖 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 给定有向图 G=(V,E) G = (V, E)G=(V,E).设 P PP 是 G GG 的一个简单路(顶点不相交)的集合.如果 V VV 中每个顶点恰好在 P PP 的一条路上,则称 P PP 是 G GG 的一个路径覆盖.P PP 中路径可以从 V VV 的任何一个顶点开…
Luogu 2764 最小路径覆盖问题 / Libre 6002 「网络流 24 题」最小路径覆盖 (网络流,最大流) Description 给定有向图G=(V,E).设P是G的一个简单路(顶点不相交)的集合.如果V中每个顶点恰好在P的一条路上,则称P是G的一个路径覆盖.P中路径可以从V的任何一个顶点开始,长度也是任意的,特别地,可以为0.G的最小路径覆盖是G的所含路径条数最少的路径覆盖. 设计一个有效算法求一个有向无环图G的最小路径覆盖. Input 第1行有2个正整数n和m.n是给定有向无…
[LOJ#6002]「网络流 24 题」最小路径覆盖 试题描述 给定有向图 G=(V,E).设 P 是 G 的一个简单路(顶点不相交)的集合.如果 V 中每个顶点恰好在 P 的一条路上,则称 P 是 G 的一个路径覆盖.P 中路径可以从 V 的任何一个顶点开始,长度也是任意的,特别地,可以为 0.G 的最小路径覆盖是 G 的所含路径条数最少的路径覆盖. 设计一个有效算法求一个有向无环图 G 的最小路径覆盖. 输入 第 1 行有 2 个正整数 n 和 m.n 是给定有向无环图 G 的顶点数,m 是…
「JSOI2015」串分割 传送门 首先我们会有一个贪心的想法:分得越均匀越好,因为长的绝对比短的大. 那么对于最均匀的情况,也就是 \(k | n\) 的情况,我们肯定是通过枚举第一次分割的位置,然后每一段长度 \(\frac{n}{k}\) 最后取最小的. 把这个思想运用到一般情况:如果分出来两段长短不一,那么长的只会比短的那个长度多 \(1\) ,再仔细想想,所有段只会有两种不同的长度 \(\lfloor \frac{n}{k} \rfloor, \lceil \frac{n}{k} \r…