Cod sursa(job #3329000)

Utilizator iustin.dumiDumitrescu Iustin iustin.dumi Data 11 decembrie 2025 15:27:51
Problema Potrivirea sirurilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.67 kb
#include <bits/stdc++.h>
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
using namespace std;
int lps[2000001],i,j,sol[1005],nr;
string a,b;
void buildPrefix()
{ int i,k=0;
  int n=a.size();
for (i=2; i<=n; i++)
{
while (k && a[k]!=a[i-1]) k=lps[k];
if (a[k]==a[i-1]) k++;
lps[i]=k;
}
}
void kmp()
{int i, k=0;
 int m=b.size(),n=a.size();
 buildPrefix();
for (int i=0;i<m;i++)
{
while (k && a[k]!=b[i])
      k=lps[k];
if (a[k]==b[i]) k++;
if (k==n )
   {nr++;
    if(nr<=1000)
       sol[nr]=i-n+1;
   }
}
fout<<nr<<'\n';
}
int main()
{ fin>>a>>b;
  kmp();
  for(i=1;i<=min(nr,1000);i++)
      fout<<sol[i]<<" ";
    return 0;
}