Cod sursa(job #1060107)

Utilizator SapientiaCHIRILA ADRIAN Sapientia Data 17 decembrie 2013 16:37:58
Problema Potrivirea sirurilor Scor 14
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <string.h>
#include <fstream>
#define Nmax 2000009
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
char t[Nmax],p[Nmax];
int v[Nmax];
int i=-1,n,m,j,poz,k=0;
int main()
{
    f.getline(p,Nmax);
    f.getline(t,Nmax);
    n=strlen(t)-1;
    m=strlen(p)-1;
  if (!m)
  {
     for(i=0;i<=n;++i)
      if (t[i]==p[m]){++k;v[k]=i;}
  }
  else if(m==n)
  {
      bool logical=true;
      for(i=0;i<=n;++i)
       if (t[i]!=p[i]) logical=false;
       if (logical) v[++k]=0;
  }
  else
  {
    bool start=0;
    do
    {
        ++i;
        if ((t[i]==p[0]) && (!start))
        {
           start=true;
           j=1;
           poz=i;
        }
        else if ((start) && (t[i]==p[j]))
        {
            if (j==m) {++k;v[k]=poz;start=false;--i;}
            else ++j;
        }
        else if ((start) && (t[i]!=p[j])) {start=false;--i;}
    }
    while(i<n-m+1);
  }
    g<<k<<"\n";
    for(i=1;i<=k;++i)
     g<<v[i]<<" ";
    return 0;
}