Cod sursa(job #147861)

Utilizator Sorin_IonutBYSorynyos Sorin_Ionut Data 3 martie 2008 17:35:25
Problema Potrivirea sirurilor Scor 14
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream.h>
#include <fstream.h>
#include <string.h>

#define IN "strmatch.in"
#define OUT "strmatch.out"
#define maxx 2000003

ifstream fin(IN);
ofstream fout(OUT);

char a[maxx],b[maxx];
int v[maxx];
long sol;
long c,lung,lungg;

void citire();
void calc();
int verif(int i);

int main()
{
 citire();
  fin.close();

 calc();

 lung=strlen(b);
 lungg=strlen(a);

 for(long i=lungg-1;i<=lung-1;i++)
  if(v[i]==c && b[i]==a[lungg-1])
   if(verif(i))
    sol++;
    
  fout<<sol<<endl;
   fout.close();
return 0;
}     

void citire()
{
 fin>>a>>b;
}

void calc()
{
 long i;
 long auxa=strlen(a);
 long auxb=strlen(b);

 c=0;
  
 for(i=0;i<auxa;i++)
  c=c+(a[i]-'A')+1;

 v[0]=b[0]-'A'+1;
 for(i=1;i<auxa;i++)
  v[i]=v[i-1]+(b[i]-'A')+1;

 for(i=auxa;i<auxb;i++)
  v[i]=v[i-1]+(b[i]-'A')+1-(b[i-auxa]-'A'+1);
}

int verif(int i)
{
 long j;
 long z=lungg-1;

 for(j=i;j>=i-lungg+1;j--)
  if(b[j]!=a[z--])
   return 0;

return 1;
}