Cod sursa(job #1464019)

Utilizator RuxyRezidentTMRuxandra P RuxyRezidentTM Data 22 iulie 2015 03:08:03
Problema Potrivirea sirurilor Scor 14
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");

char text[2000001], pattern[2000001];
int n, m;
int lps[2000001];

void readInput() {

    f>>pattern>>text;
    m = strlen(text);
    n = strlen(pattern);

}

void lpsCreation() {
    lps[0] = 0;
    for(int i = 1; i < n; i++){
        if(pattern[i] == pattern [lps[i-1]])
            lps[i] = lps[i-1] + 1;
        else
            lps[i] = 0;
    }
}

void kmp() {
    int i = 0, j = 0, occ = 0;
    while(i < m) {

        if(text[i] == pattern[j]) {
            i++; j++;
            if(j == n) {
               occ++;
               j = lps[j-1];
            }
        }
        else {
                if(j != 0) {
                    j = lps[j-1];
                }
                else {
                    i++;
                }

        }
    }
    g<<occ;

}


int main()
{
    readInput();
    lpsCreation();
    kmp();
    return 0;
}