HDU
Anoyer
这个作者很懒,什么都没留下…
展开
-
HDU-1166-敌兵布阵(线段树模板题)
博主个人博客题目链接题意:给n个兵营及每个兵营的初始人数,然后选择4种操作中的一个,一个经典的线段树模板题题解:直接套线段树模板就可以了代码:#include<stdio.h>#include<bits/stdc++.h>using namespace std;int n,p,a,b,m,x,y,ans;struct node{ int l...原创 2018-10-19 23:12:58 · 1272 阅读 · 0 评论 -
HDU-4333-Revolving Digits(扩展KMP)
CSDN题目链接题意:给你一个字符串,你可以将该字符串的任意长度后缀截取下来然后接到最前面,让你统计所有新串中有多少种字典序小于、等于、大于原串。题解:首先我们将原串扩展成两倍,算一遍扩展KMP(自匹配),时间复杂度O(n)。这样一来,我们就得到了eKMP[i],eKMP[i]代表s[i…len-1]与s的最长公共子串。为了避免重复子串重复计数,我们先求出s的最小循环节:然后我们只需统...原创 2018-11-28 17:42:19 · 300 阅读 · 0 评论 -
HDU-3336-Count the string(KMP-Next数组性质)
博主链接题目链接题意:求一个串中所有前缀子串出现次数之和题解:对于每个串他前缀串出现次数和一定大于或等于n,因为有n个前缀;所以此时只需要去计算一下每一个前缀在后面出现了几次,也就是next数组的值。结合next数组的性质可以很容易得知,next数组中存在一个非0位,就出现了一种前缀,ans就++。所以只需对字符串求一遍next数组,统计都是个非零元素就可以了。代码:#includ...原创 2018-12-05 20:45:37 · 245 阅读 · 0 评论 -
HDU-3746-Cyclic Nacklace (KMP求循环节)
博主链接题目链接Sample Input3aaaabcaabcdeSample Output025题意:给你一些串,问如果想让这个串里面的循环节至少循环两次,需要添加几个字符(只能在最前面或者最后面添加)。比如ababc 需要添加5个就是添加ababc。题解:利用Next数组的性质:符合 i % ( i - next[i] ) == 0 &&...原创 2018-12-05 20:47:10 · 293 阅读 · 0 评论 -
HDU-1686- Oulipo KMP匹配
POJ-3461 Oulipo PJ的女朋友是一个书法家,喜欢写一些好看的英文书法。有一天PJ拿到了她写的纸条,暗示要送给他生日礼物。PJ想知道自己想要的礼物是不是就是她送的,于是想看看自己想要的在纸条中出现了多少次。 Input 第一行输入一个整数代表数据的组数 每组数据第一行一个字符串 W代表PJ想要的礼物, 包含英语字符 {‘A’, ‘B’, ‘C’, …, ...原创 2018-08-02 21:11:21 · 338 阅读 · 0 评论 -
HDU-1841-Find the Shortest Common Superstring(kmp)
博主CSDN题目链接题意:给出两个串,用这两个串组成一个新串,使新串包含这两个串,问这个新串的长度最小是多少;题解:显然,对于两个串A,B;A如果是B的子串或者B如果是A的子串的话,直接输出那个母串的长度即可,如果没有这种关系,那么看一个串的后缀是否是另一个串的前缀,如果某个串的后缀与另一个串的前缀的公共部分最长,则答案=A.length+B.length-公共长度,所以可以直接用km...原创 2018-12-03 21:33:08 · 291 阅读 · 0 评论 -
HDU-1711-Number Sequence(数组跑KMP)
博主CSDN题目链接题意:给你两个数组的所有元素,让你对它们进行匹配,当位置为多少时候它们能完全匹配。题解:直接跑KMP就可以了,唯一注意的…emmm…应该不用注意吧,也就原先是字符串,现在把字符串换成数组超级大水题代码:#include<stdio.h>#include<bits/stdc++.h> using namespace std;int s...原创 2018-12-03 21:35:30 · 191 阅读 · 0 评论 -
HDU - 2087-减花布条(裸KMP模板)
博主CSDN题目链接题意:中文题面,题意也说得非常清楚了,给一个文本串,求文本串中有多少个不重复的模式串题解:kmp标准做法,甚至基本没有变动。 判断的时候,每当完整的匹配一次之后令j=0,ans++,即模式串的下标从0开始,匹配数量加1代码:#include<iostream>#include<algorithm>#include<cstdio&am原创 2018-12-03 21:36:27 · 296 阅读 · 0 评论 -
HDU - 2609 - How many (最小表示法+set除重)
博主CSDN题目链接题意:有n个环形字符串,一个环形字符串移动会形成不能的字符串,我们把它们看作同一串字符串,求有多少个不同的字符串题解:用最小表示法把每个串的最小字典序找出来, (如果两个循环串相等则他们的最小字典序也一定相等),set带有除重功能,因为set具有除重功能所以用set来存每个串求出的最小字典序代码:#include<stdio.h>#include&...原创 2018-12-03 21:39:06 · 305 阅读 · 0 评论 -
HDU - 3068 - 最长回文(裸马拉车)
个人博客题目链接题意:给出一个只由小写英文字符a,b,c…y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如aba, abba等题解:裸的马拉车(Manacher)算法,直接上板子就够了。如果你没有马拉车板子,或者说你不会马拉车,请见Manacher最长回文串算法代码:#include<stdio.h>#include<algori...原创 2018-12-03 21:40:45 · 271 阅读 · 0 评论 -
HDU - 3294 - Girls' research(裸马拉车)
个人博客题目链接题意:通过第一个字符与a的关系翻译字符串,输出最长回文串和首尾下标,不存在则输出No solution!题解:用manachar求出最长回文串中心和半径,因为变换后的串各字符下标改变了,所以输出原首尾下标要公式倒推输出字符时要跳过插入的符号。如果你没有马拉车板子,或者说你不会马拉车,请见Manacher最长回文串算法代码:#include<stdio.h&g...原创 2018-12-03 21:42:06 · 434 阅读 · 0 评论 -
HDU - 1241 - Oil Deposits(DFS联通块)
题目链接题意:就是给你一个地图,找出所有不相连(八个方向)的@组合有多少个题解:经典的DFS求联通块的题,和紫书上求油田一样,枚举每一个点进行DFS搜联通的@AC代码:#include <stdio.h>#include<bits/stdc++.h>using namespace std;const int maxn=105;char mat[m...原创 2019-02-28 20:29:00 · 186 阅读 · 0 评论 -
HDU-2328-Corporate Identity(利用string函数)
博主链接题目链接题意:给你n个字符串,问你这n个串的最长公共子串题解:题目和HDU-1238感觉差不多,暴力枚举任意一个字符串的所有子串,然后暴力匹配,这里用string解决的;代码:#include<stdio.h>#include<bits/stdc++.h>using namespace std;typedef long long ll;co...原创 2018-12-04 21:12:29 · 260 阅读 · 0 评论 -
HDU-1238-Substrings(求公共子串)
博主链接题目链接题意:找出所有字符串中共同拥有的一个子串,该子串(正、逆字符)是任何一个母串的子串,求该子串的最长长度。题解:利用string库里的find函数+STL中的reverse反转函数。先找出最短的母串,即该符合要求的子串肯定在这个母串中,即在从长到短,从最短母串中取子串,在子串正反去查看是否符合要求。代码:#include<stdio.h>#includ...原创 2020-01-14 02:31:45 · 295 阅读 · 0 评论 -
HDU - 4847 - Wow! Such Doge!(暴力)
博主链接题目链接题面太长了,就不上题目截图了QAQ题意:在给出的段落里面找出“doge”出现的次数,大小写都可以。(超级大水题,就考你输入恶心恶心人)题解:直接暴力求每一句话出现的doge次数(大小写不限),在一块就可以了输入格式处理----把类似于“Wow! Such Dooooooooooooooge!!!“这种一行输入看出多个字符串输入,这里看成三个字符串,所以直接用...原创 2018-12-04 21:10:40 · 334 阅读 · 0 评论 -
HDU-1800-Flying to the Mars(字符串Hash)
博主链接##题目链接:题意:一堆士兵学骑扫把,高级士兵可以教低级士兵,并且共用一个扫把,一个老师只能有一个学生,这个关系可以传递的,例如等级A>B>C>D>F>E,则A可以教B、B可以教C、…,那么ABCDEF共用一个扫把.给出所有士兵的等级,求最少要多少个扫把。题解:可以看得出扫把的数量就是某个最多人的等级中的人数,那么就是简单的hash了,对应的关系...原创 2018-10-19 23:52:44 · 1213 阅读 · 0 评论 -
HDU-4300-Clairewd’s message(KMP+特判)
博主链接题目题意:先给你一个密码表。然后给你一个不一定完整的串。原串满足前一半是密码,后一半是明码。要求你最小的补全这个串。题解:设给的串长度为len,则1…(len+1)/2的字母一定是密码。我们将1…(len+1)/2的字母全部安装密码表转换成原文,然后将得到的串求Next数组。再根据Next数组求出最大的相等的前后缀(长度一定小于或等于len/2,题目要求),然后输出就可以。然后...原创 2018-09-30 14:47:15 · 730 阅读 · 0 评论 -
HDU-2594-Simpsons’ Hidden Talents(KMP的next数组应用)
博主链接题目题意:给你两个串,求第一个串的前缀和第二个串的后缀的相同长度题解:( 这题和POJ2752基本一样,都是利用next性质求公共前后缀 )。利用strcat(s,s1)将两个串接起来,利用KMP的next数组性质如果s[next[n-1]]=s[n],则此时前后缀相同,然后再开始回滚,若s[next[n-1]] == s[n-1],则子串s[0,1,2,…,next[n-1]...原创 2018-09-28 22:59:41 · 761 阅读 · 0 评论 -
HDU-1358-Period(KMP求前缀循环节)
题目题目链接解题思路题解:先求出元素的最大公因子,开一个数组num记录每个数出现次数,再利用素数筛,求出所有数有当前质数因子的的个数代码#include&amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;gt;#include&amp;amp;amp;amp;lt;bits/stdc++.h&amp;amp;amp;amp;gt;#define met(a) memset(a,原创 2018-09-22 00:37:04 · 1464 阅读 · 0 评论 -
HDU1096-A+B for Input-Output Practice (VIII)
A-HDU1096-A+B for Input-Output Practice (VIII) 你的任务是求许多数的和。 Input 第一行需要输入一个整数N,接下来会有N行。 每一行开始输入一个整数M,然后会有M个数在同一行。 Output 对于每组输入,要求在一行输出它们的和。并且你要保证每组输出之间有一空行。 Sample Input 3...原创 2018-08-02 21:08:22 · 319 阅读 · 0 评论 -
HDU-3949-XOR(线性基求第K大异或值)
博主链接题目链接题意:给你n个数,q次询问,每次询问在n个数组成的异或集中第K大的数题解:这是一个线性基裸模板题,求第k大:把k二进制拆分,如果k的第i位上是1,ans^=nb[i]这是什么道理呢?异或消元最后得到的是一组基给出n个数能够异或出来的值,都是这些基线性组合形成的数代码:#include<stdio.h>#include<bits/stdc++...原创 2018-10-21 00:46:01 · 3058 阅读 · 1 评论 -
BZOJ2844-albus就是要第一个出场
博主链接题目链接题意:给出A数组,共有N个数,你可以选其中一些出来XOR(至少一个数).所以可能的XOR结果值排序后去重,问你排在第k个的结果值是多少.题解:线性基有个性质:线性基内任意集合异或结果唯一,而所有数异或0还是本身所以每个数字出现的个数就等于(1*异或值为0的集合个数) = 2^(n-cnt)所以问题就转化为求线性基有效位cnt,和q在所有异或值中第几大#inclu...原创 2018-11-02 19:42:33 · 1283 阅读 · 0 评论 -
HDU - 3374 - String Problem(最大与最小表示法+kmp求循环节)
HDU - 3374 - String Problem个人博客题意:给你一个字符串,问这个字符串经过移动后的字典序最小的字符串的首字符位置和字典序最大的字符串的首字符的位置,和能出现多少次最小字典序的字符串和最大字典序的字符串题解:利用最小表示法与最大表示法O(n)复杂度求出最小字典序和最大字典序串出现位置,然后利用kmp求出next,利用next数组性质求出循环节次数,因为最小和最大...原创 2018-11-17 17:01:47 · 610 阅读 · 0 评论 -
HDU - 3613 - Best Reward(马拉车加暴力)
博主链接题目链接题意:字母表的26个字母都有一个价值,给你一个字符串,将该字符串切成两份,对于每一份,如果是回文串,就获得该子串的字母价值之和,否则该子串的价值为0。求出将字符串切成两份后能够获得的最大价值。题解:先用Manacher算法求出以每个字母为中心的回文串的长度,并计算该字符串的前缀价值和。然后枚举切割点,得到两份子串。这样就可以知道每个子串的中心点,然后检查以该子串的中心...原创 2018-12-04 21:07:52 · 440 阅读 · 0 评论 -
HDU - 4763 -Theme Section(迭代求公共前后缀跑KMP)
博主链接题目链接题意:给一个字符串,求出字符串的最大的相同前缀后缀,并且满足前缀后缀在字符串中间出现了。题解:可以先对字符串跑KMP求一下Next数组,由next数组定义可以知道,里面存的是当前字符最长前缀和后缀,所以我们只需要从最后一个字符出发,递归寻找每个长度为的Next值的前缀后缀,对于长度为len的前缀,只需要用该前缀起和字符串的除了前缀和后缀的部分匹配就可以了,如果匹配成功...原创 2018-12-04 21:08:48 · 243 阅读 · 0 评论 -
HDU - 4513 - 吉哥系列故事――完美队形II (马拉车加判断条件)
博主链接题目链接题意:在一个长度为n的数组里面找回文串,要求回文串从中间向两边一次递减题解:在manacher过程中添加限制语句保证题目要求即可if(s_new[i+p[i]]!=-1111){ //如果前面位置大于当前位置,则不符合跳出 if(s_new[i+p[i]]<=s_new[i+p[i]-2])p[i]++; else break;}#i...原创 2018-12-04 21:09:43 · 279 阅读 · 0 评论 -
HDU - 2612 - Find a way(BFS+打表)
题目链接题意:求2个点到KFC的距离之和,使其最小题解:可用2次BFS,分别求出2个点到各个KFC的最短距离,然后找出和最小的即可AC代码:#include<stdio.h>#include<string.h>#include<iostream>#include<queue>#define inf 0xffffffusi...原创 2019-02-28 20:30:32 · 228 阅读 · 0 评论