Pagini recente » Cod sursa (job #1335470) | Cod sursa (job #2457041) | Cod sursa (job #1129034) | Cod sursa (job #3298650) | Cod sursa (job #2056368)
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
int lnga,lngb,i,pi[105],q,pos[105],n;
char a[2000005],b[2000005];
void deplasare()
{
f.getline(a,105);lnga=strlen(a);
f.getline(b,105);lngb=strlen(b);
for(i=lnga;i>=0;i--)a[i]=a[i-1];a[0]=' ';
for(i=lngb;i>=0;i--)b[i]=b[i-1];b[0]=' ';
}
void prefix()
{
for(i=2,pi[1]=0;i<=lnga;++i)
{
while(q && a[q+1] != a[i]) q=pi[q];
if(a[q+1]==a[i])q++;
pi[i]=q;
}
}
void afis()
{
for(i=1;i<=lnga;i++)
g<<pi[i]<<' ';
g<<'\n';
}
int main()
{
deplasare();
prefix();
q=0;
for(i=1;i<=lngb;i++)
{
while( q && a[q+1] != b[i]) q=pi[q];
if(a[q+1]==b[i])++q;
if(q==lnga)
{
q=pi[lnga];
++n;
pos[n]=i-lnga;
}
}
if(n>1000) n=1000;
g<<n<<'\n';
for(i=1;i<=n;i++) g<<pos[i]<<' ';
g<<'\n';
f.close();
g.close();
return 0;
}