Cod sursa(job #552317)

Utilizator GrimpowRadu Andrei Grimpow Data 12 martie 2011 09:29:04
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
    #include<iostream.h>
    #include<fstream.h>
    #include<string.h>
    #include<stdio.h>
     
    int pi[100];
     
    void prefix(char N[100])
    {
        int n,k,i;
        n=strlen(N);
        k=0;
        pi[0]=0;
        for(i=1;i<n;i++)
        {
          while(k>0&& N[k]!=N[i])
            k=pi[k-1];
           if(N[k]==N[i])
         k++;
           pi[i]=k;
           }
    }
    
    int main()
    {
      char *N = new char[2000000];
       char *M = new char[2000000];
       long i=0,n,m,q,a[1000],t,s;
      ifstream f("strmatch.in");
      while(N[i]!='\n')
           {N[i]=f.get();
           i++;
           }
       i=0;    
       while(!f.eof())
            {
            f>>M[i];
            i++;
            }      
            cout<<"DA";    
      f.close();
      prefix(N);
       t=s=0;
       m=strlen(M);
       n=strlen(N);
      q=0;
      m--;
      ofstream g("strmatch.out");
      for(i=0;i<m;i++)
         {
        // g<<":i";
          while(q>0 && N[q]!=M[i])
             q=pi[q-1];
          if(N[q]==M[i])
             q++;
          if(q==n&&t<1000) {a[t]=i-n+1; t++; s++;}
          if(q==n&&t>999) s++;
         }
       g<<s<<'\n';
       for(i=0;i<t;i++)
          g<<a[i]<<" ";
       g.close();
       return 0;   
    }