摘要: 题意: 此题为NOI2017D1T2,题目链接如下 https://www.lydsy.com/JudgeOnline/upload/Noi2017D1.pdf 题解: 本题的做法实际上比较暴力。观察数据范围,我们发现k很小,那么这意味着我们将两只蚯蚓合并的时候,只有首尾的k个字符会发生影响,那么我 阅读全文
posted @ 2020-02-20 22:40 1124828077ccj 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 题意: 胖头鱼是一条喜欢摸鱼的鱼。 他经常去河边摸鱼,每一天,他会选择一段连续的时间去摸鱼,河里有很多不同种类鱼,每一个时间点会有恰好一条鱼出现,而胖头鱼一定能摸到这条鱼(如果他在摸鱼的话)。 摸完鱼后,他会把摸到的鱼按摸到的时间顺序排成一排,统计今天摸鱼的收益,由于他是个鱼盲,他只能分辨出哪些鱼是 阅读全文
posted @ 2020-02-18 23:43 1124828077ccj 阅读(202) 评论(3) 推荐(0) 编辑
摘要: 题意: 求已知序列的所有本质不同的子区间的最大值之和。 题解: 对于每一个位置i,我们需要计算出最短的区间[i,j],使得[i,j]的字符串没有被算过,那么[i,j+1],[i,j+2],[i,j+3]...[i,n]都不会被算过。 统计答案很容易,方法应该也不少。我的做法是定义每一个点的父亲为后面 阅读全文
posted @ 2020-02-16 18:23 1124828077ccj 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 题意: 有两个字符串,问第一个字符串最少要删除多少个字符才可以使得第二个字符串不是第一个字符串的子串。第一个字符串长度小于等于10000,第二个小于等于1000。 题解: 一看这个数据范围,很明显就是O(nm)的效率dp,那么很显然f[i][j]表示第一个字符串的前i位,恰好匹配到了第二个字符串的第 阅读全文
posted @ 2020-02-16 18:08 1124828077ccj 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 题意: 给定两个字符串,你可以选择每一个字符串的非空前缀拼起来,问能拼出多少个本质不同的字符串。两个字符串长度小于等于100000。 题解: 我们考虑用所有可能的字符串减掉重复的字符串,那么显然答案就是n*m-重复个数。 那么考虑重复的时候会怎么样 如果会重复,则A+B+C=A+C+D,同时把第一个 阅读全文
posted @ 2020-02-13 21:05 1124828077ccj 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 题意: 对于一个给定长度为N的字符串,求它的第K小子串是什么。N<=5000000,K<=1000000000。 题解: 对于本题,首先我们要做的事情是先建立后缀自动机。 如果T=0,那么每一个位置的出现次数直接设为1,T=1否则就是正常的right集合大小。 那么我们可以再记一个sum[i],表示 阅读全文
posted @ 2020-02-13 11:39 1124828077ccj 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 题意: 题解: 我们观察一下它打字的过程,输入一个字符/回退一格,这不就是建立trie的过程吗? 根据题意我们可以建出一个trie,然后可以知道trie上哪个节点代表第几个打印的字符串。 那么考虑如何求答案,这是一个字符串匹配,而且还有trie,所以我们可以建立一个AC自动机。 如果有一个问题(x, 阅读全文
posted @ 2020-02-11 23:58 1124828077ccj 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 题意: https://www.lydsy.com/JudgeOnline/problem.php?id=2002 题解: 这题可以使用LCT来做,但是我不会,所以我写了分块。 如果不考虑修改,那么这题很简单,f[i]表示从第i个点弹飞所需要的次数。 如果i+ki>n那么f[i]=1否则f[i]=f 阅读全文
posted @ 2020-02-08 11:44 1124828077ccj 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 题意: 题解: 询问l~r的答案,很显然我们直接转化成0~r的答案减去0~(l-1)的答案。 如何求0~a的答案,从高位往低位枚举。 (1)如果当前位置在a中是1,那么这个位置可以取0,也可以取1。如果取0,那后面的随便取都无所谓,也就是说,后面的位置的0,1是可以随便乱放的,也就是说当前这一位为0 阅读全文
posted @ 2020-02-07 00:37 1124828077ccj 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 题意: 题解: 这题其实就是一道线段树的基础应用题,只不过代码稍稍有点长。 本题只需要维护0/1的个数,左边和右边最长连续0/1的个数,总的最大的0/1的个数。取反操作就是把上述维护的值0/1互换,其余的直接修改。 注意细节,难度并不大。 #include<cstdio> #include<algo 阅读全文
posted @ 2020-02-05 23:00 1124828077ccj 阅读(339) 评论(0) 推荐(0) 编辑