Cod sursa(job #2456221)

Utilizator DavidLDavid Lauran DavidL Data 13 septembrie 2019 21:02:17
Problema Prefix Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fi("prefix.in");
ofstream fo("prefix.out");

const int NMAX = 1e6 + 5;

int t, n;
char A[NMAX];
int lsp[NMAX];

void getLsp()
{
    lsp[0] = lsp[1] = 0;

    for (int i = 2; i <= n; i++)
    {
        int l = lsp[i - 1];
        while (l > 0 && A[i] != A[l + 1])
            l = lsp[l];
        if (A[i] == A[l + 1])
            l++;

        lsp[i] = l;
    }
}

int main()
{
    fi >> t;
    while (t--)
    {
        fi >> A + 1;
        n = strlen(A + 1);

        getLsp();

        int rez = 0;
        for (int i = n; i >= 1; i--)
        {
            if (lsp[i] && A[i] == A[i - lsp[i]])
            {
                rez = i;
                break;
            }
        }

        fo << rez << "\n";
    }

    return 0;
}