Cod sursa(job #255909)

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

#define xxx 2000001

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

char a[xxx],b[xxx],c;
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;
    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]=1;

    for(li=0,i=lunga;i<lungb && n<1000;li++,i++)
    {
       c=b[li];
       vals-=c;
       c=b[i];
       vals+=c;
       if(vals==valc)
	  if(verif(li+1))
	    n++,poz[n]=li+1;
    }

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