Cod sursa(job #255964)

Utilizator igsifvevc avb igsi Data 10 februarie 2009 21:47:20
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include<fstream>
#include<string>
using namespace std;

#define xxx 2000001

ifstream fin("grader_test50.in");
ofstream fout("strmatch.out");

char a[xxx],b[xxx],c,q,w;
int lunga,lungb,n,poz[1001],vals,valc,li;

int verif(int k)
{
    int i;
    for(i=0;i<lunga;i++)
      if(a[i]!=b[i+k])
	 return 0;
    return 1;
}

int main()
{
    fin.get(a,xxx);fin.get();
    fin.get(b,xxx);
    lunga=strlen(a);
    lungb=strlen(b);

    int i;
    if(lunga==lungb)
    {
       if(verif(0))
           fout<<"1\n0\n";
       else
           fout<<"0\n";
    }
    
    if(lunga>lungb)
       fout<<"0\n";
    
if(lunga<lungb)
{
    for(i=0;i<lunga;i++)
    {
      c=a[i];
      valc+=c;
      c=b[i];
      vals+=c;
    }

    if(valc==vals)
       if(verif(0))
	 n++,poz[n]=0;

    for(li=0,i=lunga;i<lungb;li++,i++)
    {
      q=b[li];
      w=b[i];                                
      if(q==w)
       { n++,(n>1000 ? :poz[n]=li+1);}
      else
      {                                
       vals=vals-q+w;
       if(vals==valc)
	    if(verif(li+1))
	       n++,(n>1000 ? :poz[n]=li+1);
      }
    }

    fout<<n<<'\n';
    if(n>1000)
     n=1000;
    
    for(i=1;i<=n;i++)
      fout<<poz[i]<<' ';
    fout<<'\n';
}
    
    fout.close();
    return 0;
}