[POJ2774][codevs3160]Long Long Message】的更多相关文章

[POJ2774][codevs3160]Long Long Message 试题描述 The little cat is majoring in physics in the capital of Byterland. A piece of sad news comes to him these days: his mother is getting ill. Being worried about spending so much on railway tickets (Byterland…
[POJ2774]Long Long Message(后缀数组) 题面 Vjudge Description Little cat在Byterland的首都读物理专业.这些天他收到了一条悲伤地信息:他的母亲生病了.担心买火车票花钱太多(Byterland是一个巨大的国家,因此他坐火车回家需要16小时),他决定只给母亲发短信. Little cat的家境并不富裕,因此他经常去营业厅查看自己发短信花了多少钱.昨天营业厅的电脑坏掉了,打印出两条很长的信息.机智的little cat很快发现: 1.信息…
Long Long Message Description The little cat is majoring in physics in the capital of Byterland. A piece of sad news comes to him these days: his mother is getting ill. Being worried about spending so much on railway tickets (Byterland is such a big…
http://poj.org/problem?id=2774 (题目链接) 题意 给出两个只包含小写字母的字符串,求出最长连续公共子串. solution 第一次用后缀数组,感觉有点神...才发现原来sa[0]是没用的.. 将两个字符串合并为一个,并用分隔符隔开.之后跑后缀数组,求出height[],for一遍,找到在分隔符两侧的height值最大的便是答案. 代码 // poj2774 #include<algorithm> #include<iostream> #include…
题面 HiHocoder1415 Poj2774 Sol 都是求最长公共子串,\(hihocoder\)上讲的很清楚 把两个串拼在一起,中间用一个特殊字符隔开 那么答案就是排序后相邻两个不同串的后缀的\(height\) 为什么呢? 如果答案为不相邻的两个后缀的前缀,计算它们最长前缀时必定要跨越过这些中间\(height\)值,也就是选相邻的两个一定要比不选相邻的两个更优 # include <bits/stdc++.h> # define IL inline # define RG regi…
http://poj.org/problem?id=2774 给定两个字符串 A 和 B,求最长公共子串. 论文题,把两个串合并起来,比较两个串各自的后缀的height值取最大即可. #include<algorithm> #include<iostream> #include<cstring> #include<cctype> #include<cstdio> #include<vector> #include<queue&g…
点此看题面 大致题意: 求两个字符串中最长公共子串的长度. 关于后缀数组 关于\(Height\)数组的概念以及如何用后缀数组求\(Height\)数组详见这篇博客:后缀数组入门(二)--Height数组与LCP. 大致思路 由于后缀数组是处理一个字符串的,因此我们第一步自然是将这两个字符串拼在一起,并在中间加一个不可能出现的字符,例如\(\%\). 然后我们用后缀数组求出其\(Height\)数组. 注意一个性质,答案肯定是按字典序排名后相邻后缀的\(LCP\)值中的最大值. 因此,我们只要枚…
最长公共子串...两个字符串连在一起,中间放一个特殊字符隔开.求出height之后,枚举height,看两个后缀是不是分布于两段字符串..如果是,这个值就可以作为答案.取最大值即可. ; var c,h,rank,sa,x,y:..maxn] of longint; n,k:longint; s:ansistring; function max(x,y:longint):longint; begin if x>y then exit(x) else exit(y); end; function…
用个分隔符将两个字符串连接起来,再用后缀数组求出height数组的值,找出一个height值最大并且i与i-1的sa值分别在两串字符中就好 #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio> #include<cmath> using namespace std; #define N 200010 int wa[N],wb[N],wv[N],ws[N];…
问两个串的最长公共子串,n<=100000. SAM可以直接搞当然SA哈希都可以..类似于KMP的做法,如果沿parent边走要顺势修改匹配位置. #include<stdio.h> #include<string.h> #include<algorithm> #include<stdlib.h> //#include<iostream> //#include<assert.h> //#include<time.h>…