Cod sursa(job #1172305)

Utilizator Impaler_009Mihai Nitu Impaler_009 Data 17 aprilie 2014 12:02:18
Problema PScPld Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
#include <cstring>

#define mod 40000061

using namespace std;

ifstream fin ("parpal.in");
ofstream fout ("parpal.out");

int n,test,p[2000020];
char ss[1000010],s[2000020];

int main()
{
    fin>>test;

    for (;test; --test)
    {
        fin>>ss+1;

        s[1] = '0';
        n = 1;
        int nn = strlen (ss+1);

        for (int i=1; i<=nn; ++i)
        {
            s[++n] = ss[i];
            s[++n] = '0';
        }

        int start = 1, maxi = 0, current;

        for (int i=1; i<=n; ++i)
        {
            if (i != 1)
                current = min (p[2*maxi-i],2*maxi-i - (maxi-p[maxi]));
            else current = 1;

            for (; i+current <= n && i-current >= 1; ++current)
                if (s[i+current] != s[i-current])
                     break;

            p[i] = current;

            if ((p[i]&1) && p[i] > 1 && i >= start)
            {
                if (i - p[i] < start)
                    start = i + p[i];
            }

            if (i + p[i] > maxi + p[maxi])
                maxi = i;
        }

        if (start > n)
            fout<<"DA";
        else fout<<"NU";

        fout<<"\n";
    }
}