Pagini recente » Cod sursa (job #1737054) | Cod sursa (job #1933577) | Cod sursa (job #2317031) | Cod sursa (job #977821) | Cod sursa (job #2910691)
#include <bits/stdc++.h>
using namespace std;
bool ispal(char c[ ], int n, int newn){
int low = n+1;
int high = newn;
while(low < high){
char lwo = c[high];
c[high] = c[low];
c[low] = lwo;
low++;
high--;
}
low = 1;
high = newn;
while (low < high){
if (c[low] != c[high]) {
return 0;
}
low++;
high--;
}
return 1;
}
char a[2001], b[2001];
int pref[2002];
int main(void){
ofstream cout("palindrom2.out");
ifstream cin("palindrom2.in");
cin >> a+1;
int n,m, Lmax = 0, ans = 0;
n = strlen(a+1);
pref[1] = 0;
for(int i = 2;i<=n;i++){
while(Lmax != 0 && a[i] != a[Lmax+1]){
Lmax = pref[Lmax];
}
if(a[Lmax+1] == a[i]){
Lmax++;
}
pref[i] = Lmax;
}
int n_pref = n;
int cmm = 1;
for(int i = 2;i<=n;i++){
if(pref[i] != 0 && cmm == 1){
cmm = i;
}
b[i] = a[i];
}
if(cmm == 1){
pref[cmm] = 1;
}
int l = pref[cmm];
while(1){
a[++n_pref] = a[l++];
b[n_pref] = a[l-1];
if(ispal(a,n,n_pref))break;
for(int i = 1;i<=n_pref;i++){
a[i] = b[i];
}
}
for(int i = 1;i<=n_pref;i++){
cout << a[i];
}
}