07 2019 档案

摘要:题意: 给$n$个串,要你求出一个最长子串$A$,$A$在每个字串至少都出现$2$次且不覆盖,问$A$最长长度是多少 思路: 后缀数组处理完之后,二分这个长度,可以$O(n)$验证可行性,注意是“不覆盖”(英文不好看不懂),随便搞一下就好了。 代码: 阅读全文
posted @ 2019-07-30 22:09 KirinSB 阅读(148) 评论(0) 推荐(0)
摘要:题意: 给两个串$A、B$,问你长度$ =k$的有几对公共子串 思路: 先想一个朴素算法: 把$B$接在$A$后面,然后去跑后缀数组,得到$height$数组,那么直接$rmq$就能$O(1)$得到任意两个$A$和$B$的LCP。如果$LCP = k$,那么这个串的贡献对数为$LCP k + 1$。 阅读全文
posted @ 2019-07-30 17:08 KirinSB 阅读(169) 评论(0) 推荐(0)
摘要:题意: 给定一个串$s$,$s$必有一个最大循环节的连续子串$ss$,问最大循环次数是多少 思路: 我们可以知道,如果一个长度为$L$的子串连续出现了两次及以上,那么必然会存在$s[0]、s[L]、s[2L] \cdots s[L k]$中至少有两个连续的位置是相同的,然后看字母$s[L i]和s[ 阅读全文
posted @ 2019-07-29 11:04 KirinSB 阅读(284) 评论(0) 推荐(0)
摘要:题意: 定义一个串为$super$回文串为: $\bullet$ 串s为主串str的一个子串,即$s = str_lstr_{l + 1} \cdots str_r$ $\bullet$ 串s为回文串 $\bullet$ 串$str_lstr_{l + 1}...str_{\llcorner (l 阅读全文
posted @ 2019-07-26 19:04 KirinSB 阅读(402) 评论(0) 推荐(0)
摘要:题意: 一个回文的价值为长度 出现次数,问一个串中的子串的最大回文价值 思路: 回文树模板题,跑PAM,然后计算所有节点出现次数。 参考: "回文串问题的克星——Palindrome Tree(回文树)" 代码: cpp include include include include include 阅读全文
posted @ 2019-07-26 15:52 KirinSB 阅读(222) 评论(0) 推荐(0)
摘要:题意: 有$n$根长度不一的棍子,q次询问,求$[L,R]$区间的棍子所能组成的周长最长的三角形。棍长$\in [1, 1e9]$,n$\in [1, 1e5]$。 思路: 由于不构成三角形的数组为菲波那切数列,所以当棍数超过44时,长度超过1e9,所以从最大开始数最多不超过45次就能找到构成三角形 阅读全文
posted @ 2019-07-26 11:06 KirinSB 阅读(269) 评论(0) 推荐(0)
摘要:题意: 求最大矩阵面积,要求矩阵内数字满足$max min include include include include include include include include include include include include define ll long long usin 阅读全文
posted @ 2019-07-26 10:23 KirinSB 阅读(227) 评论(0) 推荐(0)
摘要:题意: 强制在线,求$LR$区间最大子集异或和 思路: 求线性基的时候,记录一个$pos[i]$表示某个$d[i]$是在某个位置更新进入的。如果插入时$d[i]$的$pos[i]$小于我当前插入的$pos[r]$,那么就用当前插入的数换出原来的$d[i]$,继续进行插入并更新$pos$,这样就能保证 阅读全文
posted @ 2019-07-26 10:05 KirinSB 阅读(499) 评论(0) 推荐(0)
摘要:题意: 给出$n$个数,求出子集异或第$k$小的值,不存在输出 1。 思路: 先用线性基存所有的子集,然后对线性基每一位进行消元,保证只有$d[i]$的$i$位存在1,那么这样变成了一组基线性基,然后按$k$的二进制找地k小。因为线性基不保存0,所以对有0的情况要进行特判。 代码: cpp incl 阅读全文
posted @ 2019-07-24 10:39 KirinSB 阅读(311) 评论(0) 推荐(0)
摘要:题意: n m的矩阵,为0表示可以走,1不可以走。规定每走一步只能向下、向左、向右走。现给定两种操作: 一.1 x y表示翻转坐标(x,y)的0、1。 二.2 x y表示从(1,x)走到(n,y)有几种走法 思路: 假设$dp[i][j]$表示从下一层能到达(i,j)点的路径数,那么显然到达(i,j 阅读全文
posted @ 2019-07-23 16:21 KirinSB 阅读(383) 评论(0) 推荐(0)
摘要:题意: 给你一个串,现需要你给出一个子序列,满足26个约束条件,$len(A_i) = L_i$ 且 $len(A_i) = L_i$且满足$L_i$所需的长度小于剩余可添加长度。 官方题解: 代码: cpp include include include include include inclu 阅读全文
posted @ 2019-07-23 11:45 KirinSB 阅读(898) 评论(2) 推荐(0)
摘要:题意: n个点,分成两组A,B,如果点i在A中,那么贡献值$a_i$,反之为$b_i$。 现要求任意$i \in A,j \in B$不存在 $x_i = x_j$ 且 $y_i include include include include include include include incl 阅读全文
posted @ 2019-07-22 11:51 KirinSB 阅读(266) 评论(0) 推荐(0)
摘要:题意:把2n个人分成相同两组,分完之后的价值是val(i, j),其中i属于组1, j属于组2,已知val表,n <= 14 思路:直接dfs暴力分组,新加的价值为当前新加的人与不同组所有人的价值。复杂度$O(C_{2n}^n * n)$。 大概6e8这样子, 代码: 阅读全文
posted @ 2019-07-20 22:10 KirinSB 阅读(498) 评论(0) 推荐(0)
摘要:题意:01串,操作1:把l r区间的0变1,1变0;操作2:求出l r区间的子序列种数 思路:设DP[i][j]为到i为止以j结尾的种数,假设j为0,那么dp[i][0] = dp[i - 1][1] + dp[i -1][0] (0结尾新串) + dp[i - 1][0] (0结尾旧串) - dp 阅读全文
posted @ 2019-07-19 19:20 KirinSB 阅读(275) 评论(0) 推荐(0)
摘要:题意:求子序列种数 思路:dp[i]代表到i的所有种数,把当前i放到末尾,那么转移方程dp[i] = dp[i - 1] + dp[i -1],但是可能存在重复,比如1 2 3 2,在第2位置的时候出现12,但是在第4位置的时候,还是可能出现12,那么我们要减掉多出来的,就是减去dp[1]这里加2的 阅读全文
posted @ 2019-07-19 14:47 KirinSB 阅读(246) 评论(0) 推荐(0)
摘要:题意:给出每条边权值,可以更新每条边权值,询问两个点路径的最小权值 思路:重链剖分边权化点权,让每个儿子节点继承边权。 插点权的时候比较边的两个节点的深度,插进儿子节点中。 代码: 阅读全文
posted @ 2019-07-19 10:00 KirinSB 阅读(240) 评论(0) 推荐(0)
摘要:题意:问你长度为2 * (n+m)的字符串由(n+m)个A和B组成,要求有n个AB子序列和m个BA子序列,这样的串有几个 https://ac.nowcoder.com/acm/contest/881/E 思路: 假设有一个合法串,因为子序列n个AB和m个BA,那么显然有前n个A必为AB的A,前m个 阅读全文
posted @ 2019-07-18 19:40 KirinSB 阅读(791) 评论(0) 推荐(1)
摘要:题意:给一棵树,要求你对一个路径上的值进行加减,查询某个点的值 思路:重链剖分。 由于分了轻重儿子,我每次到重儿子的top只要O(1),经过的轻儿子最多logn条,那么我每次往上跳最多跳logn次。 所以总的路径可以分为:dfn[top[u]]到dfn[u]组成的完整路径,每次更新完走向fa[top 阅读全文
posted @ 2019-07-18 10:03 KirinSB 阅读(195) 评论(0) 推荐(0)
摘要:题意:每位十进制数都能转化为4位二进制数,比如9是1001,127是 000100100111,现在问你,在L到R(R <= $10^{200}$)范围内,有多少数字的二进制表达式不包含模式串。 思路:显然这是一道很明显的数位DP + AC自动机的题目。但是你要是直接把数字转化为二进制,然后在Tri 阅读全文
posted @ 2019-07-17 11:13 KirinSB 阅读(265) 评论(0) 推荐(0)
摘要:题意:目标串n( <= 10)个,病毒串m( < 1000)个,问包含所有目标串无病毒串的最小长度 思路:貌似是个简单的状压DP + AC自动机,但是发现dp[1 << n][5e4]根本开不出那么多空间,似乎GG。但是我们仔细想一下就能发现,既然要包含所有目标串的最小长度,那必然这个串就是只有目标 阅读全文
posted @ 2019-07-16 19:27 KirinSB 阅读(167) 评论(0) 推荐(0)
摘要:题意:给你些分数串,给你一个主串,主串每出现一个分数串加一分,要你重新排列主串,最多几分 思路:显然这里开$40^4$去状压内存不够。但是我们自己想想会发现根本不用开那么大,因为很多状态是废状压,不是不存在的,那么可以考虑想办法简化状态。 一个是hash,直接打表所有子情况,用ha[][][][]表 阅读全文
posted @ 2019-07-16 15:26 KirinSB 阅读(288) 评论(0) 推荐(0)
摘要:题意:n个病毒串,给你一个串t,问你最少改几个能没有病毒串 思路:去年还觉得挺难得...其实就是AC自动机上跑一下简单的DP,每个位置都往没病毒的地方跑,然后看一下最少是什么。 代码: 阅读全文
posted @ 2019-07-15 19:43 KirinSB 阅读(227) 评论(0) 推荐(0)
摘要:题意:m个密码串,问你长度为n的至少含有k个不同密码串的密码有几个 思路:状压一下,在build的时候处理fail的时候要用 | 把所有的后缀都加上。 代码: 阅读全文
posted @ 2019-07-15 11:30 KirinSB 阅读(186) 评论(0) 推荐(0)
摘要:题意:给出n个字符,p个病毒串,要你求出长度为m的不包含病毒串的主串的个数 思路:不给取模最恶劣情况$50^{50}$,所以用高精度板子。因为m比较小,可以直接用DP写。 因为给你的串的字符包含拓展ASCII码(128~256),由于编译器的原因,char的读入范围在-128~127或者0~255之 阅读全文
posted @ 2019-07-14 19:59 KirinSB 阅读(211) 评论(0) 推荐(0)
摘要:题意:找出所有长度不大于L的,包含至少一个模式串的主串的个数。 思路:和2778类似,但是这里求1~L所有长度的种数。所以我们只要求出来不包含的所有个数就行。 假设AC自动机上所有节点的邻接矩阵为A,那么答案为$\sum_{i=1}^n 26^i - \sum_{i=1}^n A^i$。 因为L有点 阅读全文
posted @ 2019-07-13 16:17 KirinSB 阅读(208) 评论(0) 推荐(0)
摘要:题意:给出m个模式串,要求你构造长度为n(n <= 2000000000)的主串,主串不包含模式串,问这样的主串有几个 思路:因为要不包含模式串,显然又是ac自动机。因为n很大,所以用dp不太好。 在图论中,如果我们知道一个图的邻接矩阵A,$A_{ij}$ = 1表示i走一步到j有一条路,那么$A^ 阅读全文
posted @ 2019-07-13 14:32 KirinSB 阅读(256) 评论(0) 推荐(0)
摘要:题意:从 1 走到 n,要求所走路径不能出现给定的路径,求最短路 思路:因为要求不能出现给定路径,那么我可以求助ac自动机完成判断。 我们可以在build的时候标记哪些路径不能出现,显然下面这种表示后缀不能出现,那么他也不能出现 然后再把图建完整。因为如果一个路径不在Trie中有两种情况,一种是他可 阅读全文
posted @ 2019-07-13 11:47 KirinSB 阅读(250) 评论(0) 推荐(0)
摘要:题意:问你主串有几种模式串。但是所有串都是加密的,先解码。解码过程为:先把串按照他给的映射表变成6位数二进制数,然后首尾衔接变成二进制长串,再8位8位取变成新的数,不够的补0。因为最多可能到255,所以不能用char存,要用int。 思路:模拟乱搞一下,加个板子完事。 代码: 阅读全文
posted @ 2019-07-12 16:38 KirinSB 阅读(271) 评论(0) 推荐(0)
摘要:题意:给出主串中每个模式串的个数 思路:毒瘤出题人多组数据没说给的是多组数据。 板子: 代码: 阅读全文
posted @ 2019-07-12 16:08 KirinSB 阅读(211) 评论(0) 推荐(0)
摘要:题意:给出模式串,问你主串出现了几种模式串。 思1路:ac自动机模板题。参考q学姐:av6295004 ac自动机的基本原理就是在trie上建Fail值,这样我每次失配就去找当前的最长后缀去匹配,一直到完全失配为止,这样我就找遍了所有的模式串。 代码: 阅读全文
posted @ 2019-07-12 11:08 KirinSB 阅读(149) 评论(0) 推荐(0)
摘要:题意:有2辆车运货,每次同时出发,n(<10),各自装货容量c1 c2,问最少运几次运完。 思路:n比较小,打表打出所有能运的组合方式,用背包求出是否能一次运走。然后状压DP运的顺序。 代码: 阅读全文
posted @ 2019-07-11 20:01 KirinSB 阅读(184) 评论(0) 推荐(0)
摘要:题意:一个表达式,n + 1个数,n个操作,每个操作Oi和数Ai+1对应,给出每个操作Oi和数Ai+1消失的概率,给出最后表达式值得期望。只有| , ^,&三个位操作 思路:显然位操作只对当前位相关,那么我们可以一位一位求解,算出每一位的概率,然后算出这一位所给出的贡献的期望。 代码: 阅读全文
posted @ 2019-07-11 18:31 KirinSB 阅读(179) 评论(0) 推荐(0)
摘要:题意:一个栈,每次可以选择和栈顶一样的数字,并且和栈顶距离小于6,然后同时消去他们,问能不能把所有的数消去 思路:一个数字最远能消去和他相距9的数,因为中间4个可以被他上面的消去。因为还要判断栈顶有没有被消去,所以10位dp。dp[i][j]表示第i个栈顶状态为j能否存在,用1表示某位被消去。那么直 阅读全文
posted @ 2019-07-11 15:28 KirinSB 阅读(268) 评论(0) 推荐(0)