标签:
Hidden StringTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1434 Accepted Submission(s): 514
Problem Description
Today is the 1st anniversary of BestCoder. Soda, the contest manager, gets a string
1. 2. The concatenation of
Input
There are multiple test cases. The first line of input contains an integer
There‘s a line containing a string
Output
For each test case, output "YES" (without the quotes) if Soda can find such thress substrings, otherwise output "NO" (without the quotes).
Sample Input
Sample Output
|
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int f[10];
char ss[] = {"anniversary"};
char str[210], str1[210], str2[210];
void getfail(char *P)
{
int l = strlen(P);
f[0] = f[1] = 0;
for(int i = 1; i < l; i++)
{
int j = f[i];
while(j && P[i] != P[j])
j = f[j];
f[i+1] = P[i] == P[j] ? j + 1 : 0;
}
}
int Find(char *T, char *P)//在字符串T中 查找字符串P
{
int l1 = strlen(T);
int l2 = strlen(P);
int j = 0;
for(int i = 0; i < l1; i++)
{
while(j && T[i] != P[j])
j = f[j];
if(T[i] == P[j])
j++;
if(j >= l2)
return i+1;//返回最后匹配位置
}
return -1;
}
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
scanf("%s", str);
bool flag = false;
char s[10];
int p, pos;
for(int i = 1; i <= 9; i++)//第一分割点
{
if(flag)
break;
for(int j = i; j <= 9; j++)//第二分割点
{
//截取第一个字符串
p = 0;
for(int k = 0; k < i; k++)
s[p++] = ss[k];
s[p] = '\0';
getfail(s);//求失配函数
if(Find(str, s) != -1)//查找
{
pos = Find(str, s);
p = 0;
int len = strlen(str);
for(int k = pos; k < len; k++)//重构文本串
str1[p++] = str[k];
str1[p] = '\0';
}
else
continue;
//截取第二个字符串
p = 0;
for(int k = i; k <= j; k++)
s[p++] = ss[k];
s[p] = '\0';
getfail(s);
if(Find(str1, s) != -1)
{
pos = Find(str1, s);
p = 0;
int len = strlen(str1);
for(int k = pos; k < len; k++)//重构文本串
str2[p++] = str1[k];
str2[p] = '\0';
}
else
continue;
//截取第三个
p = 0;
for(int k = j+1; k < 11; k++)
s[p++] = ss[k];
s[p] = '\0';
getfail(s);
if(Find(str2, s) != -1)
{
flag = true;//第三个成功就 ok了
break;
}
}
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
Arithmetic SequenceTime Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 870 Accepted Submission(s): 384
Problem Description
A sequence
Teacher Mai has a sequence
Input
There are multiple test cases.
For each test case, the first line contains three numbers
Output
For each test case, print the answer.
Sample Input
Sample Output
|
版权声明:本文为博主原创文章,未经博主允许不得转载。
hdoj 5311 Hidden String 【KMP + 暴力】
标签:
原文地址:http://blog.csdn.net/chenzhenyu123456/article/details/47838461