poj1743(后缀数组)】的更多相关文章

利用后缀数组,先对读入整数处理str[i]=str[i+1]-str[i]+90这样可以避免负数,计算Height数组,二分答案,如果某处H<lim则将H数组分开,最终分成若干块,判断每块中是否存在SA[i]-SA[j]>lim(注意不是>=因为查分后如果相等那么两个公共串连接部分的元素是公用的,不符合题意),注意特判n=1的情况,因为查分后的结果是个空串,会导致RE. #include <iostream> #include <cstdio> #include…
Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 25348   Accepted: 8546 Description A musical melody is represented as a sequence of N (1<=N<=20000)notes that are integers in the range 1..88, each representing a key on the…
#include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; ],wa[],wb[],sa[],x[],y[],h[],wv[],a[],b[],rank[]; int cmp(int *r,int a,int b,int l){return (r[a]==r[b])&&(r[a+l]==r[b+l]);} void DA…
Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 16757   Accepted: 5739 Description A musical melody is represented as a sequence of N (1<=N<=20000)notes that are integers in the range 1..88, each representing a key on the…
#include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define pii pair<int, int> #define y1 skldjfskldjg #define y2 skldfjsklejg using namespace std; ; ; const int inf = 0x3f3f3f3f; const LL INF =…
[POJ1743]Musical Theme(后缀数组) 题面 洛谷,这题是弱化版的,\(O(n^2)dp\)能过 hihoCoder 有一点点区别 POJ 多组数据 题解 要求的是最长不可重叠重复子串 也就是找两个最长的相同子串 使得它们不相交 先求出\(SA,height\) 考虑一下如果两个子串相同 那么也就是两个后缀的前缀相同 还是一样吧. 二分答案,长度为\(K\) 那么,现在要找的就是连续长度不小于\(K\)的\(height\) 如果一段连续的\(height\)都不小于\(K\)…
poj1743 题意 给出一个数字序列(串),现在要去寻找一个满足下列条件的子串: 长度不小于 5 存在重复的子串(如果把一个子串的所有数字都加上或减去一个值,与另一子串的数字对应相同,我们称它们重复) 重复的子串之间不能重叠 分析 把相邻的数字作差(后面的减前面的)得到一个新的数列. 那么我们去二分答案 m ,判断串上是否存在两个不重叠但是完全相同的长度为 m 的子串. 判断不重叠:在分组时,记录最大最小 sa 值,如果最大减最小的值大于 m ,说明不重叠(这样其实是要至少隔一个位置,注意最后…
题目链接:https://vjudge.net/problem/POJ-1743 Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 32402   Accepted: 10808 Description A musical melody is represented as a sequence of N (1<=N<=20000)notes that are integers in the ra…
P2743 乐曲主题Musical Themes(poj1743) 然后呢这题思路其实还是蛮简单的,只是细节特别多比较恶心,忘记了差分带来的若干疏漏.因为转调的话要保证找到相同主题,只要保证一段内相对的差值不变,所以自然而然想到差分.注意细节.1.因为差分会带来负数,而负数在后缀数组里最初排名是会出问题的,所以要全搞成正的,+100即可2.因为最后一位不可以计算入差分数组里,所以不算,n要减1,同时二分答案后要记得把求得的最长差分长度加上一才是原数组长度3.最坑的地方是找不重复的最长字串,自然套…
POJ1743 题目意思是求不重叠的最长相同变化的子串,输出该长度 比如1 2 3 4 5 6 7 8 9 10,最长长度为5,因为子串1 2 3 4 5 和 6 7 8 9 10变化都一样的 思路:既然要求变化一样,那么可以让原数组前后相减,然后利用后缀数组height的性质求子串最长公共前缀即可 height性质:1.height[i]表示排名为i和i-1的子串的最长公共前缀 PS:预处理数组时要留意,把n个数删去第一个 当作n-1个数来求重复子串 (间隔至少为1)然后最长重复子串长度+1就…