题目大意 \(T\)(\(T\leq10\))组询问 每组询问给出一个字符串\(A\)(\(|A|\leq10^4\)),\(n\)(\(n\leq4\))个\(A\)的子串\(B_1,B_2,B_3,...,B_n\)(\(\forall i \in[1,n],|B_i|\leq10^3\)) 如果\(|B_i|=r-l+1\)且\(B_i\)的每一个字符依次与\(A_l,A_{l+1},...,A_{r}\)相等,那么区间\([l,r]\)每个位置都被覆盖了一次 求如果必须把\(B_1,..…
[BZOJ4560][JLoi2016]字符串覆盖 Description 字符串A有N个子串B1,B2,…,Bn.如果将这n个子串分别放在恰好一个它在A中出现的位置上(子串之间可以重叠)这样A中的若干字符就被这N个子串覆盖了.问A中能被覆盖字符个数的最小值和最大值. Input 第一行包含一个正整数T,表示数据组数.保证T≤10.接下来依次描述T组数据,每组数据中:第一行包含一个由小写字母组成的字符串,表示母串A.第二行包含一个整数N,表示子串的个数.接下来N行,每行包含一个由小写字母组成的字…
先用KMP求出所有可以放的位置,然后两个值分别处理. 最大值: 贪心,4!枚举放的先后位置顺序,2^3枚举相邻两个串是否有交. 若有交,则后一个的起始位置一定是离前一个的结束位置最近的位置,无交也一样. 最小值: 首先去掉被其它串包含的串,因为肯定可以和其它串放同样的位置. 将所有串从长到短排序方便DP. f[S][i]表示当前放的串的情况为S,串目前所覆盖到的最后一个位置为i,覆盖的最小总长度是多少,则有: 当最后一个覆盖到i的串位置与其它串不相交时:f[S][i]=min{f[S'][k]}…
题意 字符串A有N个子串B1,B2,-,Bn.如果将这n个子串分别放在恰好一个它在A中出现的位置上(子串之间可以重叠) 这样A中的若干字符就被这N个子串覆盖了.问A中能被覆盖字符个数的最小值和最大值. 字符串长度\(A<=10000,N<=4\),子串长充\(<=1000\) 分析 参照_Gloid的题解. 首先kmp求出每个子串能放在哪些位置.接下来的两部分贪心和状压都可以,各取比较方便的. 最大值 考虑贪心.考虑枚举子串的左端点出现顺序,在此基础上每个子串的位置肯定都应该尽量靠前,有…
首先kmp求出每个子串能放在哪些位置.接下来的两部分贪心和状压都可以,各取比较方便的. 最大值考虑贪心.考虑枚举子串的左端点出现顺序,在此基础上每个子串的位置肯定都应该尽量靠前,有是否与上个子串有交两种选择,如果有交一定会使交集最小,于是枚举第一个子串出现位置并暴力枚举4!*23种情况. 最小值考虑状压.首先把被包含的子串去掉方便处理.将线段排序,设f[i][S]为当前覆盖到的最右位置为i已出现的子串集合为S时的最小覆盖长度,转移时考虑上条线段是否与其有交,单调队列优化转移(因为懒写了线段树).…
题解 先用kmp求出来一个ed[i][j]表示在母串的第i位是第j个子串的结尾 考虑状压一个二进制位表示这个子串覆盖过没有 对于最大值,记一个dp[S][i]表示子串的使用状况为S,当前为母串的第i位,最大覆盖的个数 每次枚举S一个没有的子串j,把目标状态记成S^(1 << j - 1) = T dp[T][i]可以从dp[T][i - 1]取个max过来,如果i还是当前枚举的子串j能匹配上,那么可以从dp[S][i - len[j]] + len[j]转移 然后就是考虑覆盖的情况,有些时候覆…
NSString* str=@"hello";//存在代码区,不可变 NSLog(@"%@",str); //1.[字符串插入] NSMutableString* str1=[[NSMutableStringalloc]initWithString:@"hello"];//存在堆区,可变字符串 NSLog(@"str1:%@",str1); [str1 insertString:];//把一个字符串插入另一个字符串中的某一个位…
NSString* str=@"hello";//存在代码区,不可变 NSLog(@"%@",str); //1.[字符串插入] NSMutableString* str1=[[NSMutableStringalloc]initWithString:@"hello"];//存在堆区,可变字符串 NSLog(@"str1:%@",str1); [str1 insertString:@"234"atIndex:…
题目大意 区间众数 题解 莫队 代码 #include<algorithm> #include<cmath> #include<cstdio> #include<cstdlib> #include<cstring> #include<ctime> #include<iomanip> #include<iostream> #include<map> #include<queue> #inc…
由于换了台电脑,而我的贪心 & 构造能力依然很拉跨,所以决定再开一个坑( 前传: 贪心/构造/DP 杂题选做 u1s1 我预感还有Ⅲ(欸,这不是我在多项式Ⅱ中说过的原话吗) 24. P5912 [POI2004]JAS 一开始直接莽了个点分治,当我测过了样例美滋滋地一交,发现自己获得了 20 分的好成绩之后,才发现事情有那么亿点点不对劲( 不难发现,题目等价于求高度最小的点分树的高度,直接求有点困难,我们不妨来对其进行一些转化:我们考虑给每个点一个标号,那么问题可以转化为,求使得任意两个标号相同…