Cod sursa(job #1854298)

Utilizator lorena1999Marginean Lorena lorena1999 Data 22 ianuarie 2017 16:12:23
Problema Potrivirea sirurilor Scor 18
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

ifstream f("strmatch.in");
ofstream g("strmatch.out");

void build_pi(int pi[100000], char sir[100000], char text[100000], int &c, int v_poz[100000])
    {
        int k=0;
        for(int i=0; i<strlen(sir); i++)
            {
                if(sir[i]!=text[k])
                {
                    k=0;
                    pi[i]=k;
                }
                if(sir[i]==text[k])
                {
                    k++;
                    if(k==strlen(text))
                    {
                        pi[i]=k;
                        if(sir[i]==text[0])
                            k=1;
                    }
                    else pi[i]=k;
                }
                if(pi[i]==strlen(text))
                    {
                        c++;
                        v_poz[c]=i-strlen(text)+1;
                    }
            }
    }
int main()
    {
        char text[100000], sir[100000];
        int pi[100000], c=0, v_poz[100000];
        f>>text>>sir;
        build_pi(pi, sir, text, c, v_poz);
        /*for(int i=0; i<strlen(sir); i++)
            cout<<pi[i]<<" ";*/
        g<<c<<endl;
        for(int i=1; i<=c; i++)
            g<<v_poz[i]<<" ";
    }