-
hdu 2594 题目链接 题意:given string s1,s2, find the longest prefix of s1 that is a suffix of s2. 思路:kmp。。。懒得说了。注意边界。 /* *********************************************** Author :111qqz Created Time :2016年08月12日 星期五 01时12分51秒 File Name :code/hdu/2594.cpp ************************************************ */ #include …
Read More -
hdu 2203 亲和串 (kmp)
Aug 11, 2016 · 2 min readhdu 2203 题目链接 题意:给定字符串A(一个环),和字符串B,问B是否在A中出现过。 思路:环的问题。。复制一遍到末尾就好了。。出于严谨的考虑。。我们只复制n-1个字符。 以及要记得判断文本串的长度是否大于等于模板串,如果小于,直接判断no//然而题目数据太水,没判也过了 /* *********************************************** Author :111qqz Created Time :2016年08月12日 星期五 00时56分28秒 File Name :code/hdu/2203.cpp …
Read More -
hdu 3746题目链接 题意:给定一个字符串,是一个环(首尾相连),问至少再添加多少个珠子才能使得整个串是循环的。。。 思路:一下子想到了最小覆盖子串的模型。。。我求出最小覆盖子串的长度(n-nxt[n])。然后特判下最小覆盖子串的长度等于字符串长度的情况。。。试着叫了一发。。。竟然就A了2333.。。大概是所谓的题感吧(逃 /* *********************************************** Author :111qqz Created Time :2016年08月12日 星期五 00时41分19秒 File Name :code/hdu/3746.cpp …
Read More -
hdu 5763 题目链接 题意:给定两个字符串A和B,每个出现在A中的B(可以overlap)都有两种含义,问A串一共可能有多少种含义。 思路:kmp+dp. 考虑dp[i]为前i个字符(也就是从开始长度为i,注意不是字符串的下标为i)的含义数。 我们考虑第i个字符对其他位置字符的贡献。 首先第i位的含义数可以无条件得转移到i+1位。也就是dp[i+1]+=dp[i]; 此外,如果第i位是一个B串开始的位置,那么第i位对i+len2位就有贡献。也就是dp[i+len2]+=dp[i]; 初始化dp[0]=1,其他为0. 剩下我们要做的就是处理出A串中的哪些位置是B串开始的位置。 kmp处理下就好,用一个布尔数组标记。 /* …
Read More -
hdu 1867 题意 题意:给两个字符串,将两个字符串首尾拼接之后得到一个长度最短的字符串,求这个最短的字符串(一个串的前缀可能是另一个串的后缀,这样的话只出现一次就行了) 思路:kmp。。注意和hdu 1841区分。那道题是只要得到一个串包含两个串即可。这道题是首尾拼接得到。 还要注意。。这道题要求了长度相同时按照字典序小的方法拼接。。。 /* *********************************************** Author :111qqz Created Time :2016年08月11日 星期四 05时08分32秒 File Name :code/hdu/1867.cpp …
Read More -
hdu 1841题目链接 题意:给两个字符串,问包含这两个字符串的最小的字符串的长度(最小是因为,一个串的子串可能是另一个串的后缀,这样出现一次就可以了) 思路:其实这道题最关键的思想部分是和kmp没有关系的。。。 我们考虑最naive的匹配方式。 如果存在文本串的子串(之前写成了后缀,特此更正,不一定是首尾拼接,这是和hdu 1867的区别)等于模式串的前缀,那么这段子串或者后缀的长度为最后的j。 两个串各做一次模式串和文本串。 不过暴力匹配复杂度爆炸,所以用了kmp。。。 upd:代码新添加了注释。 /* *********************************************** Author :111qqz …
Read More -
hdu 1358 题目链接 题意:给一个字符串,求这个字符串的每个前缀(包括本身)的能否由k个子串组成(K>1) 思路:和poj 2406 比较类似。。 结论:字符编号从0开始,如果又i%(i-next[i])==0,则i前面的 串为一个轮回串,其中轮回子串出现i/(i-next[i])次。 证明类似之前最小覆盖中的,不断的等价交换,两两相等...(这个证明在字符串这里总是遇到2333) 然而其实我。。。做的时候。。并没有想到去证明。。。而是打印出了nxt数组然后找规律求得2333. 之前一直觉得找规律不是什么拿的上台面的做法。。。但是今年打了几场多校。。尤其是电子科大的那场。。。我发现。。。其实有的题目的正解就是找规律,猜结 …
Read More -
hdu 2087 题目链接 题意:问模式串在文本串中出现的次数,不允许重叠。 思路:kmp,关键在于不允许重叠。。。 其实只要每次找到的时候j=0一下就好咯。 /* *********************************************** Author :111qqz Created Time :2016年08月11日 星期四 02时52分44秒 File Name :code/hdu/2087.cpp ************************************************ */ #include <cstdio> #include <cstring> …
Read More -
hdu 1711 题目链接 题意:给定两个数列,问第二个数列在第一个数列中出现的位置(第一个元素对应的位置) 思路:数列也可以看成字符串,然后左kmp,返回的答案是i+1-m。。。1A /* *********************************************** Author :111qqz Created Time :2016年08月11日 星期四 02时30分23秒 File Name :code/hdu/1711.cpp ************************************************ */ #include <cstdio> #include …
Read More -
poj 3080 题目链接 题意:给出n个字符串(n<=10),字符串长度不超过70,问出现在全部n个字符串中的最长并且字典序最小的长度大于等于3的子串。 思路:数据范围很小。。。直接暴力枚举+kmp匹配一下。。。 /* *********************************************** Author :111qqz Created Time :2016年08月11日 星期四 01时29分02秒 File Name :code/poj/3080.cpp ************************************************ */ #include …
Read More