Cod sursa(job #1015430)

Utilizator CosminRusuCosmin Rusu CosminRusu Data 24 octombrie 2013 17:08:24
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
#include <vector>
#include <string.h>
using namespace std;

const int MAXN = 2013;

int N, M, Prefix[MAXN], Ans[MAXN];
char A[MAXN];

ifstream cin("map.in");
ofstream cout("map.out");

inline int BuildPrefix(int act) {
    memset(Prefix, 0, sizeof(Prefix));
    int K = 0;
    Prefix[1] = 0;
    for(int i = 2 ; i <= M ; ++ i) {
        while(K > 0 && A[K+1] != A[i])
            K = Prefix[K];
        if(A[i] == A[K+1])
            ++ K;
        Prefix[i] = K;
    }
    Ans[act] = Prefix[M];
}

int main() {
    cin >> N >> M;
    for(int i = 1 ; i <= N ; ++ i) {
        //for(int j = 1 ; j <= M ; ++ j)
            cin >> (A+1);
        BuildPrefix(i);
    }
    int ans = (1 << 30);
    for(int i = 1 ; i <= N ; ++ i)
        if(Ans[i])
            ans = min(ans, Ans[i]);
    if(ans == (1 << 30))
        ans = M;
    cout << ans << '\n';
    return 0;
}