Cod sursa(job #1652880)

Utilizator razvandRazvan Dumitru razvand Data 15 martie 2016 16:00:42
Problema Prefix Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 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 && s[2*i-1]; 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-1] == s[j+ln2]*/) {
                    crr++;
                } else {
                    break;
                }
            }

            //cout << i << " " << crr << " " << ln2 << endl;

            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;
                }
            }

            //cout << i << " " << crr << " " << ln2 << endl;

            mx = max(crr*ln2, mx);

        }

    }

    return mx;

    //cout << '\n';

}

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;
}