Cod sursa(job #1652900)

Utilizator razvandRazvan Dumitru razvand Data 15 martie 2016 16:13:53
Problema Prefix Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <iostream>
#include <fstream>
#include <string.h>
#define MAX 1000003

using namespace std;

ifstream in("prefix.in");
ofstream out("prefix.out");

char s[MAX];
int ln;

int maxPref() {

    int mx = 0;
    int ln2 = 0;

    for(int i = 1; i < ln && 2*i-1 < ln; i++) {

        if(s[i] == s[0] && s[i-1] == s[2*i-1]) {

            int crr = 1;
            ln2 = i;

            for(int j = i; j < ln; j += i) {
                if(s[j] == s[0] && s[j+ln2-1] == s[ln2-1]) {
                    crr++;
                } else {
                    break;
                }
            }

            for(int j = 1; j < ln2; j++) {

                for(int k = 1; k < crr; k++) {

                    if(s[j] != s[j+k*ln2]) {
                        crr = k;
                        break;
                    }

                }

                if(crr == 0 || crr == 1) {
                    crr = 0;
                    break;
                }
            }

            if(crr*ln2 > mx)
                mx = crr*ln2;

        }

    }

    return mx;

}

int main() {

    int t;
    in >> t;
    in.getline(s, 100);

    for(int i = 0; i < t; i++) {

        in.getline(s, MAX);
        ln = strlen(s);
        out << maxPref() << '\n';

    }

    return 0;
}