Cod sursa(job #2910691)

Utilizator Vlad_NistorNIstor Vlad Vlad_Nistor Data 24 iunie 2022 13:30:45
Problema Numarare triunghiuri Scor 0
Compilator cpp-64 Status done
Runda 3_iulie Marime 1.38 kb
#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];
    }


}