Cod sursa(job #2028406)

Utilizator Horia14Horia Banciu Horia14 Data 27 septembrie 2017 21:04:58
Problema Potrivirea sirurilor Scor 38
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<cstdio>
#include<cstring>
#define MAX_LEN 2000000
#define MAX_POS 1000
using namespace std;

char P[MAX_LEN+1], T[MAX_LEN+1];
int pos[MAX_POS], n, m, k;

inline int minim(int x, int y)
{
    if(x < y) return x;
    return y;
}

void Read()
{
    FILE *fin = fopen("strmatch.in","r");
    fscanf(fin,"%s",P);
    fscanf(fin,"%s",T);
    n = strlen(T);
    m = strlen(P);
    fclose(fin);
}

void patternMatching()
{
    int i, j;
    bool ok;
    for(i=0; i<n-m; i++)
    {
        ok = true;
        for(j=0; j<m && ok; j++)
            if(T[i+j] != P[j])
                ok = false;
        if(ok)
        {
            if(k < MAX_POS)
                pos[k++] = i;
            else k++;
        }
    }
}

void Write()
{
    FILE *fout = fopen("strmatch.out","w");
    fprintf(fout,"%d\n",k);
    int l = minim(MAX_POS,k);
    for(int i=0; i<l; i++)
        fprintf(fout,"%d ",pos[i]);
    fprintf(fout,"\n");
    fclose(fout);
}

int main()
{
    Read();
    patternMatching();
    Write();
    return 0;
}