1354. Palindrome. Again Palindrome
Time limit: 1.0 second Memory limit: 64 MB
A
word
is the nonempty sequence of symbols
a
1
a
2…
an. A
palindrome
is the word
a
1
a
2…
an
that is read from the left to the right and from the right to the left the same way (
a
1
a
2…
an
=
ana
n−1…
a
1). If
S
1
=
a
1
a
2…
an
and
S
2
=
b
1
b
2…
bm, then
S
1
S
2
=
a
1
a
2…
an
b
1
b
2…
bm. The input contains some word
S
1. You are to find a nonempty word
S
2
of the minimal length that
S
1
S
2
is a palindrome.
Input
The first input line contains
S
1
(it may consist only of the Latin letters). It’s guaranteed that the length of
S
1
doesn’t exceed 10000 symbols.
Output
S
1
S
2.
Samples
input | output |
---|---|
No | NoN |
OnLine | OnLineniLnO |
AbabaAab | AbabaAababA |
Problem Author: Denis Nazarov
Problem Source: USU Junior Championship March'2005
***************************************************************************************
kmp没想出来,用简单法做的
***************************************************************************************
1 #include<iostream> 2 #include<string> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 #include<cstdio> 7 #include<queue> 8 #include<vector> 9 #include<stack> 10 using namespace std; 11 char str[10011]; 12 int n,i,j,k; 13 bool judge(int x)//检查后缀的最大回文 14 { 15 int h,g; 16 for(h=x,g=n-1;g>h;h++,g--) 17 if(str[h]!=str[g]) 18 return false; 19 return true; 20 } 21 int main() 22 { 23 scanf("%s",str); 24 n=strlen(str); 25 for(i=0;i<n;i++) 26 cout<<str[i]; 27 for(i=1;i<n;i++) 28 if(judge(i)) 29 break; 30 for(j=i-1;j>=0;j--) 31 cout<<str[j]; 32 cout<<endl; 33 return 0; 34 35 36 }