String
文章平均质量分 59
AcDora
这个作者很懒,什么都没留下…
展开
-
HDU 3068 最长回文串
这是一道很裸的最长回文串的题目,模板直接就可已过了,不过由于细节,我TLM了好几次! 以后要狠狠注意这些细节才好 代码如下: //最长回文子串 #include #include const int N = 110010; int id, n, Maxid, Maxl, p[N<<1]; char s[N], str[N<<1]; int Min( int a, int b )原创 2013-03-25 11:49:50 · 808 阅读 · 0 评论 -
HDU 4513 完美队形II (Manacher)
这道题有很多人用的是KMP的算法,据说KMP的时间复杂度是O(n*logn),但是用Manacher,就是O(n), 所以力挺MANA 这里面和正常求最长回文串不同的是,这个回文串要前半部分单调递增,当然,由于对称性,后半部分单调递减! 那么就要在原来的基础上,加上几个判断,保证回文串是满足以上要求的。 首先说,最右侧在sign的位置,那么一定是要将最长回文串长度加1的,这是显而易见的,对称原创 2013-03-25 12:00:57 · 1086 阅读 · 0 评论 -
UVA 11151 Longest Palindrome (最大回文串)
这里面读题一定要精准,首先它说的是从一个string里面take away一些字符,使得剩下的字符成为一个palindrome,这里求的是palindrome的最大长度,那么也就是说删除最少的字符使得这个string成为一个palindrome,并且可是在原串不连续的。 那么这个道题和之前做的longest palindrome还有有区别的,之前一定是substring,表示一定是在原串中连续的原创 2013-03-28 08:36:03 · 1030 阅读 · 0 评论 -
POJ 3974 Palindrome ( Largest Palindrome substring )
和之前的类似,以后这样的题目要秒杀!还有wa了一次,问题是i和1我总是打错,以后一定要注意;还有能有printf的就不要用cout了,流还是比较费时的 代码如下:#include #include #include #include using namespace std; string s, str; int Maxid, Maxl, id, p[2000020]; void ini原创 2013-03-28 07:41:12 · 835 阅读 · 0 评论 -
HDU 1711 Number Sequence (KMP)
这是第一道KMP的题目。 就是字符串匹配问题,KMP其实思想很简单,写出来代码也不是很长! 代码如下: #include #include const int N = 1000000; const int M = 10000; int n, m, T; int a[N], b[M], next[M]; void getNext() { int j, k; j = 0原创 2013-04-30 10:16:26 · 780 阅读 · 0 评论 -
POJ 1961 Period(KMP思想的应用)
要解这道题,一定要明白next数组每次如果不匹配一次向前找的原理。 如下图1:这里面,假设这个线段是一个字符串,那么下面我们来说一下,为什么一直取next就可以找到找到next的值。首先我假设我们从第三段最后一个位置发现s[j] != s[k]了,那么我们只清楚的是的前一个是指向粉色线段的末尾的,那么也就是说粉色线段和红色的线段标记的这两段字符串是相等的。当发生s[j]和s[k]不等的时,k要向原创 2013-04-30 17:28:07 · 888 阅读 · 0 评论 -
POJ 2752 Seek the Name,Seek the Fame(KMP应用)
要解决这道题,首先要理解KMP中的next数组,现在觉得这个next数组真的很重要啊!!! 要找到一个字符串的所有的既是前缀又是后缀的子串的长度,那么就要知道,next指针的的含义,指向最长既是前缀又是后缀的前缀位置的后一位,那么一个对于一个位置的next的指针的位置的next指针指向的位置,于当前位置来说是什么意义呢?其实就是一个当前位置为止,既是前缀又是后缀的前缀的后一位,只不过不再是最长的原创 2013-04-30 18:19:39 · 985 阅读 · 0 评论 -
POJ 3461 Oulipo(KMP)
还是KMP,只不过这次要返回的不是第一个出现位置,而是出现了多少次,原理相同,只是找到了之后不再返回,继续找。不过有一点要注意,word在text中可能重叠,所以当找到了一个字符串的时候,下一次再找,并不是从当前的text的位置开始和word的第一个字符进行比较! 代码: #include #include const int N = 1000001; const int M = 100原创 2013-04-30 10:54:27 · 713 阅读 · 0 评论 -
HDU 2087 剪花布条(字符串匹配KMP)
这道题,也是字符串匹配的问题,数据不大,估计暴力也可以,用时间要求是1000MS,KMP算法15MS过的!给力! 然后唯一不同的是,在模式串中不算有重叠的匹配串,只算一共有多少个不重叠的就好。要想最多,那很好办,只要从头挨着剪,就不会破坏其他的,比如aaaa,aa只要是从剪,就能剪出两个,要是从中间开始,只能剪出一个。 因此……见代码: #include #include const原创 2013-04-30 22:19:27 · 894 阅读 · 0 评论