可以非常轻易的将题意转化为有多少子串满足排名相同 注意到$KMP$算法只会在当前字符串的某尾添加和删除字符 因此,如果添加和删除后面的字符对于前面的字符没有影响时,我们可以用$KMP$来模糊匹配 对于本题而言,在末尾插入一个字符时,如果$S$串和$T$串中这两个字符的排名一样,那么它们对前面的影响也是一样的 因此,插入或者删除字符时,后面的字符如果排名一样,可以任何对前面没有影响 反之,如果不一样,那么无法匹配 所以,这满足模糊匹配的条件 我们可以拿树状数组来维护插入和删除 由于$next[i]…
题目描述 给出两个长度分别为n.m的序列A.B,求出B的所有长度为n的连续子序列(子串),满足:序列中第i小的数在序列的Ai位置. 输入 第一行包含两个整数n, m (2≤n≤m≤1000000). 第二行包含n个整数si,构成1,2,…,n的排列,1≤si≤n且si≠sj. 第三行包含m个整数hi,表示建筑的高度(1≤hi≤109,1≤i≤m),所有的hi均不相同. 每一行的整数之间用单个空格隔开. 输出 第一行包含1个整数k ,表示匹配的序列数目.第二行包含k个整数,分别为在正确匹配的每个序…
Cow Patterns Description A particular subgroup of K (1 <= K <= 25,000) of Farmer John's cows likes to make trouble. When placed in a line, these troublemakers stand together in a particular order. In order to locate these troublemakers, FJ has lined…
头炸了啊,只做出L题,前两天刚看的Shawn zhou的博客学习的,幸亏看了啊,否则就爆零了,发现题目都是经典题,线段树,KMP,我都没看过,最近又在复习考研,真后悔大一大二没好好学习啊,得抽时间好好补一下了.还报名了蓝桥杯啊,心里好没底... # Title A Watto and Mechanism B Infinite Inversions C Pashmak and Parmida's problem D Balanced Lineup E Snowflake Snow Snowflak…
题意:给2个数字序列 a 和 b ,问按从小到达排序后,a中的哪些子串与b的名次匹配. a 的长度 N≤100,000,b的长度 M≤25,000,数字的大小 K≤25. 解法:[思考]1.X 暴力.枚举 a 中的子串,选出来排序后比对名次.O(n*  m log m  *m)=O(n*m^2*log m).    2.X  暴力+树状数组优化.枚举 a 中的子串,选出来后比较前缀名次(P.S.这种转化常出现,比如:[洛谷 p3368]模板-树状数组 2(数据结构) 就是将个体转化为前缀.),看…
[LOJ#2507][CEOI2011]Matching(KMP,树状数组) 题面 LOJ 题解 发现要做的是排名串的匹配. 然后我们考虑把它转成这个位置之前有多少个数小于当前这个数,这样子只要每个位置都对应相等那么一定是合法的. 然后就可以类似\(KMP\)的预处理出一个\(nxt\)数组,然后再类似\(KMP\)的匹配. 因为需要支持动态求前面一段区间有多少个数比这个数小,所以需要用\(BIT\)维护. #include<iostream> #include<cstdio> #…
2384: [Ceoi2011]Match 1892: Match 1461: 字符串的匹配 题目大意: 数据范围: 题解: 很巧妙的一道题呀. 需要对$KMP$算法有很深的理解才行. 首先我们需要发现,要求的这个东西跟字符串匹配有点像. 我们在单个模式串匹配的时候用到的$KMP$算法,合法匹配条件是两个字符完全相同. 但是这个题本质上就是要求子串离散化之后相同. 如果两个串离散化之后完全相同,等价于一个条件,就是每个数前面比它小的个数通通相等. 这是显然的. 所以我们尝试改变$KMP$的匹配模…
题意: 给定一个字符串S,找到另外一个字符串T,T既是S的前缀,也是S的后缀,并且在中间某个地方也出现一次,并且这三次出现不重合.求T最长的长度. 例如:S = "abababababa",其中"aba"既是S的前缀,也是S的后缀,中间还出现了一次,并且同前缀后缀均不重合.所以输出"aba"的长度3.如果找不到一个符合条件的字符,输出0.   题解: 先对S做一次拓展kmp,求出next数组 然后其实next每一个数就对应了一个前缀匹配的情况.…
题目描述 回忆树是一棵树,树边上有小写字母. 一次回忆是这样的:你想起过往,触及心底--唔,不对,我们要说题目. 这题中我们认为回忆是这样的:给定 \(2\) 个点 \(u,v\) (\(u\) 可能等于 \(v\))和一个非空字符串 \(s\) ,问从 \(u\) 到 \(v\) 的简单路径上的所有边按照到 \(u\) 的距离从小到大的顺序排列后,询问边上的字符依次拼接形成的字符串中给定的串 \(s\) 出现了多少次. 输入 第一行 \(2\) 个整数,依次为树中点的个数 \(n\) 和回忆的…
[APIO2019] [LOJ 3146] 路灯 (cdq分治或树状数组套线段树) 题面 略 分析 首先把一组询问(x,y)看成二维平面上的一个点,我们想办法用数据结构维护这个二维平面(注意根据题意这里的y要-1,这样问题变成[x,y]区间是否是由连续的一段1组成) 如果我们改变第x个灯的状态,那么只有原来满足全1的条件,且现在不满足全1条件的区间受到影响.设包含x的最大的连续1的区间为[l,r],则左端点在[l,x],右端点在[x,r]的询问会受到影响.转化到二维平面上,就变成x坐标在[l,x…