Cod sursa(job #1609223)

Utilizator TataruTataru Mihai Tataru Data 22 februarie 2016 17:55:19
Problema Potrivirea sirurilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <cstring>
#include <fstream>
#define inFile "strmatch.in"
#define outFile "strmatch.out"
#define NMAX 2000002

using namespace std;

char s1[NMAX], s2[NMAX];
int n1, n2, apar, poz[NMAX];

int main()
{
    ifstream fin(inFile);
    fin.getline(s1, NMAX);
    fin.getline(s2, NMAX);
    n1 = strlen(s1), n2 = strlen(s2);
    int j = 0, prec = 0;
    bool ok = true;
    for(int i = 0; i < n2; ++i) {
        if(ok) i = prec;
        if(!ok) prec = --i;
        j = 0;
        if(s2[i] == s1[j]) {
            ++j;
            ok = true;
            for(; j < n1; ++j) {
                ++i;
                if(s1[j] != s2[i]) {
                    ok = false;
                    break;
                }
            }
            if(ok) {
                poz[++apar] = prec;
                prec++;
            }
        }
        else{ prec++; ok = true; }
    }
    ofstream fout(outFile);
    fout<<apar<<"\n";
    for(int i = 1; i <= apar; ++i)
        fout<<poz[i]<<" ";
}