UVA11107 Life Forms --- 后缀数组】的更多相关文章

UVA11107 Life Forms 题目描述: 求出出现在一半以上的字符串内的最长字符串. 数据范围: \(\sum len(string) <= 10^{5}\) 非常坑的题目. 思路非常好想. 构造出后缀数组. 二分出\(len\)后用\(height\)分组 记\(bel(i)\)表示排名为\(i\)后缀属于哪一个串 当同一组内的不同的\(bel(i)\)出现了\(n/2\)时,本组内有一组解. 注意: 每行数据间要打一个空行 #include <cstdio> #includ…
题目链接:https://vjudge.net/problem/POJ-3294 Life Forms Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 16905   Accepted: 4970 Description You may have wondered why most extraterrestrial life forms resemble humans, differing by superficial t…
题目链接: Poj 3294 Life Forms 题目描述: 有n个文本串,问在一半以上的文本串出现过的最长连续子串? 解题思路: 可以把文本串用没有出现过的不同字符连起来,然后求新文本串的height.然后二分答案串的长度K,根据K把新文本串的后缀串分块,统计每块中的原文本串出现的次数,大于原文本串数目的一半就作为答案记录下来,对于输出字典序,height就是排好序的后缀数组,只要按照顺序输出即可. #include <cstdio> #include <cstring> #i…
引用罗穗骞论文中的话: 将n 个字符串连起来,中间用不相同的且没有出现在字符串中的字符隔开,求后缀数组.然后二分答案,用和例3 同样的方法将后缀分成若干组,判断每组的后缀是否出现在不小于k 个的原串中.这个做法的时间复杂度为O(nlogn). #include<cstdio> #include<iostream> #include<algorithm> #include<vector> #include<cstring> #include<…
相同的题目,输出格式有区别. 给定n个字符串,求最长的子串,使得它同时出现在一半以上的串中. 不熟悉后缀数组的童鞋建议先去看一看如何用后缀数组计算两个字符串的最长公共子串 Ural1517 这道题的思路也是基本相同的,都是利用了后缀数组的良好性质. #include <iostream> #include <cstring> #include <cstdio> using namespace std; const int MAX = 100500; const int…
                                                                          Life Forms Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 10800   Accepted: 2967 Description You may have wondered why most extraterrestrial life forms resemble h…
Life Forms   Description You may have wondered why most extraterrestrial life forms resemble humans, differing by superficial traits such as height, colour, wrinkles, ears, eyebrows and the like. A few bear no human resemblance; these typically have…
题目传送门 传送门I 传送门II 题目大意 给定$n$个串,询问所有出现在严格大于$\frac{n}{2}$个串的最长串.不存在输出'?' 用奇怪的字符把它们连接起来.然后求sa,hei,二分答案,按mid分组. 判断每一组存在的后缀属于的原串的种类数是不是存在那么多个. 这个做法可以推广到多串求LCS,然后多个log,完美在SPOJ上T掉. Code /** * poj * Problem#3294 * Accepted * Time: 391ms * Memory: 5024k */ #in…
题意 输入n(n<=100)个字符串,每个字符串长度<=1000,你的任务是找出一个最长的字符串使得超过一半的字符串都包含这个字符串. 分析 训练指南上后缀数组的一道例题,据说很经典(估计也就是height分组比较常用).但是训练指南上给出的中文题面真滴坑B啊!书上说,连续出现,我懵逼了好久! 我们把这n个字符串连成一个长的字符串S,且中间用不同的未出现的字符相隔开(为什么隔开我们后面说),比如样例一会变为abcdefg1bcdefgh2cdefghi3.这样每一段是一个原字符串.然后问题转换…
Life Forms Problem's Link Mean: 给你n个串,让你找出出现次数大于n/2的最长公共子串.如果有多个,按字典序排列输出. analyse: 经典题. 直接二分判断答案. 判断答案p时,我们扫一遍height数组,如果height[i]<p时开辟一个新段. 判断时用set存储所在串编号,不仅起到去重的作用,而且也起到统计段长的作用. 也可以直接用字符串hash来做,也是先二分,然后O(n)判断,时间复杂度和后缀数组一样. Time complexity: O(N*log…