字符串
a10.
这个作者很懒,什么都没留下…
展开
-
hdu 4513
题目 这个考对manancher算法过程的理解,就拿板子改一下,然后在向外扩展的部分增加一些条件,然后就可以过了。 #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<vector> #include<cmath> #include<map> #include<string> #include<原创 2020-08-08 15:57:44 · 103 阅读 · 0 评论 -
hdu 3613
题目 这题比较考对manacher的理解,首先我们考虑如何判断前iii位和后jjj位是回文串(好多博客对这个点都没说清楚)。首先p[i]指的是以i为中心的最长回文半径(在manacher算法的新串中),且p[i]-1是在原串的回文长度,那我们是不是可以想,如果在新串中,以i为中心的串半径能达到左边界或者右边界,就说明前iii位或者后jjj位是回文串。既然这样,碰到左边界了,p[i]-1就是前iii位可以组成回文串,后jjj位同理,可能语言逻辑不大清晰,那就看看代码吧。 #include<cstdio&原创 2020-08-08 15:20:46 · 112 阅读 · 0 评论 -
hdu 3294
题目 题意有点难理解,意思就是先给你一个字符变换规则,然后求出变换后的字符串的最长回文字串。 首先这题要求我们理解manacher算法,p[i]代表什么等。我们可以在确定最长长度的时候记录位置,因为p[i]记录的是以i为中心的最长回文半径,所以就(pos±p[i]±1)/2就可以了。因为manacher会在字符串的每个字符前面上加标记,所以要/2。 #include<cstdio> #include<algorithm> #include<cstring> #includ原创 2020-08-08 15:05:51 · 124 阅读 · 0 评论 -
hdu 3746
题目 这个就是求,若一个字符串有不完整的循环节,求要补足多少个字符才能变完整。 记一下公式吧 #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<vector> #include<cmath> #include<map> #include<string> #include<queue>原创 2020-08-08 11:41:06 · 84 阅读 · 0 评论 -
luogu 1575
题目 这题是表达式求值的弱化版,先从简单的坐起吧。 首先我们可以发现,or的优先级是最低的,一旦出现or,左边的值立刻就可以先计算了。按照这个思路,一旦一个优先级高的运算符后面有一个优先级低的运算符,那我们就先把优先级高的都算好了,再去算优先级低的,这样能保证答案是正确的。 #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<vector&g原创 2020-08-08 11:34:42 · 101 阅读 · 0 评论 -
cf 1029 A 新生赛的题补回来了
题目 上学期的时候已经确定这个要找公共前缀和后缀的最长长度了,近几天研究了kmp更加了解了这个东西。这道题可以让我们更清楚的了解next数组。那这题怎么做呢? 首先我们把next数组求出来,得到字符串(n这个位置,因为是整个字符串重复)的最长公共前后缀长度,然后直接输出一遍,然后我们可以直接利用公共部分,削减剩下输出的长度,具体可以看代码。 #include<cstdio> #include<algorithm> #include<list> #include<cs原创 2020-07-15 14:46:28 · 141 阅读 · 0 评论 -
CH 1602 求序列中两数最大异或
题目 书上的解释一开始没懂,看了代码才知道是怎么回事。 我们把每一个数都转换成长度为32的二进制串,每一个数插入之前都会去找与它自己异或最大的值,但是怎么找呢?根据异或的特性我们可以得知,每一位与自己不同可以令数最大,那么对于第i个数的每一位,都要去找与这位不同的数(根据树的特性,我们从高位到低位储存是最容易处理的,因为这样做确保最高位最大),能找到这一位为1,不能则为0。不懂看看代码就明白了 #include<cstdio> #include<algorithm> #include原创 2020-07-14 17:33:15 · 192 阅读 · 0 评论 -
luogu 3879
题目 这题还真的是建立n颗trie树,诀窍在于如何压缩空间。 考虑使用bitset,bitset是8位才一个字节,空间直接除8,开个bitset数组就可以当二维数组用了。 #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<iostream> #include<bitset> using namespace std; int n,原创 2020-07-14 16:16:40 · 63 阅读 · 0 评论 -
hdu 1251
题目 简单的trie树题,利用类似前缀和的思想,每经过一个点就+1,在哪个点停在来就返回那个点的值,就做完了。 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<string> #define int long long using namespace std; int trie[10005*55][28],n,m,color[10原创 2020-07-14 14:20:48 · 72 阅读 · 0 评论