【hdu 6208】The Dominator of Strings
【链接】h在这里写链接
【题意】
【题解】
【错的次数】
【反思】
【代码】
#include<bits/stdc++.h>
using namespace std; const int N = 1e5;
const int SN = 2e2;
const int MAX_CHAR = 300;//每个数字的最大值。
int s[N + 10];//如果是数字,就写成int s[N+10]就好,从0开始存
int Sa[N + 10], T1[N + 10], T2[N + 10], C[N + 10], T;
int Height[N + 10], Rank[N + 10], idx[N + 10], in[N + 10], tag, L[N + 10], R[N + 10];
int Le[N + 10];
vector <string> vec;
bool flag[N + 10]; void build_Sa(int n, int m) {
int i, *x = T1, *y = T2;
for (i = 0; i<m; i++) C[i] = 0;
for (i = 0; i<n; i++) C[x[i] = s[i]]++;
for (i = 1; i<m; i++) C[i] += C[i - 1];
for (i = n - 1; i >= 0; i--) Sa[--C[x[i]]] = i;
for (int k = 1; k <= n; k <<= 1)
{
int p = 0;
for (i = n - k; i<n; i++) y[p++] = i;
for (i = 0; i<n; i++) if (Sa[i] >= k) y[p++] = Sa[i] - k;
for (i = 0; i<m; i++) C[i] = 0;
for (i = 0; i<n; i++) C[x[y[i]]]++;
for (i = 1; i<m; i++) C[i] += C[i - 1];
for (i = n - 1; i >= 0; i--) Sa[--C[x[y[i]]]] = y[i];
swap(x, y);
p = 1; x[Sa[0]] = 0;
for (i = 1; i<n; i++)
x[Sa[i]] = y[Sa[i - 1]] == y[Sa[i]] && y[Sa[i - 1] + k] == y[Sa[i] + k] ? p - 1 : p++;
if (p >= n) break;
m = p;
}
} bool contain(string &S, string T) {//最长的那个串和 短串
int l = 1, r = S.size(),temp = -1;
while (l <= r) {
int m = (l + r) >> 1;
if (S.compare(Sa[m], T.length(), T) <= 0)//如果后缀比S来的小。
{
temp = m;
l = m + 1;//可以再大一点
}
else
{
r = m - 1;
}
}
if (temp == -1)
return 0;
else
return S.compare(Sa[temp], T.length(), T) == 0;
} int main() {
//freopen("F:\\rush.txt", "r", stdin);
ios::sync_with_stdio(0), cin.tie(0);
int TT;
cin >> TT;
while (TT--) {
int T;
cin >> T;
int n = 0, ma = 0, idxma;
string ss;
vec.clear();
vec.push_back(" ");
for (int i = 1; i <= T; i++) {
cin >> ss;
vec.push_back(ss);
if ((int)ss.size() > ma) {
ma = (int)ss.size();
idxma = i;
}
}
for (int i = 0; i <= (int) vec[idxma].size() - 1; i++)
s[n++] = vec[idxma][i];
s[n] = 0;
build_Sa(n + 1, MAX_CHAR);//注意调用n+1
bool ok = true;
for (int i = 1; i <= T; i++)
if (idxma!=i){//不能是最大的那个,那个是要被匹配的。
if (!contain(vec[idxma], vec[i])) {
ok = false;
break;
}
}
if (ok) {
cout << vec[idxma] << endl;
}
else
cout << "No" << endl;
}
return 0;
}
【hdu 6208】The Dominator of Strings的更多相关文章
- 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题
		[HDU 3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ... 
- 【HDU 5647】DZY Loves Connecting(树DP)
		pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ... 
- -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】
		[把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ... 
- 【HDU 2196】 Computer(树的直径)
		[HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ... 
- 【HDU 2196】 Computer (树形DP)
		[HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ... 
- 【HDU 5145】 NPY and girls(组合+莫队)
		pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ... 
- 【hdu 2594】Simpsons’ Hidden Talents
		Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ... 
- 【hdu 1043】Eight
		[题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=1043 [题意] 会给你很多组数据; 让你输出这组数据到目标状态的具体步骤; [题解] 从12345 ... 
- 【HDU 3068】 最长回文
		[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3068 [算法] Manacher算法求最长回文子串 [代码] #include<bits/s ... 
随机推荐
- LightOJ 1063 Ant Hills
			Ant Hills Time Limit: 2000ms Memory Limit: 32768KB This problem will be judged on LightOJ. Original ... 
- LeetCode_ZigZag Conversion
			一.题目 ZigZag Conversion Total Accepted: 31399 Total Submissions: 140315My Submissions The string &quo ... 
- 关于client浏览器界面文字内容溢出用省略号表示方法
			在实际的项目中,因为client浏览器文字内容的长度不确定性和页面布局的固定性,难免会出现文字内容超过div(或其它标签,下同)区域的情况.此时比較好的做法就是当文字超过限定的div宽度后自己主动以省 ... 
- Swagger文档转Word
			Swagger文档转Word 文档 GitHub 地址:https://github.com/JMCuixy/SwaggerToWord/tree/developer 原创作品,转载请注明出处:h ... 
- goinstall
			[背景] 折腾: [记录]go语言中通过log4go实现同时输出log信息到log文件和console 期间,以: http://code.google.com/p/log4go/ 为例,如何安装第三 ... 
- C++ 与C# 对应的变量互转
			一.C++ 与C# 对应的变量互转的使用实例 C++的动态链接库的函数: C# 调用C++动态链接库数据类型的转换,其中在C++中数据类型为char *,在C#中对应的数据类型为intPtr. 二.常 ... 
- 【Codeforces Round #428 (Div. 2) C】Journey
			[Link]:http://codeforces.com/contest/839/problem/C [Description] 给一棵树,每当你到一个点x的时候,你进入x的另外一每一个出度的概率都是 ... 
- 【2017"百度之星"程序设计大赛 - 初赛(B)】Chess
			[链接]http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=776&pid=1001 [题意] 在这里写题意 [题 ... 
- tomcat做成windows服务之后使用JMX监控的问题
			转载:http://blog.chinaunix.net/uid-20449851-id-2369842.html 
- silverlight依据json字符串动态创建实体类
			1.接收json字符串: //用JsonValue转换json字符串是为了之后获得json字符串的每行数据和每一列的列名 JsonValue jv = JsonValue.Parse(json); ... 
