Pagini recente » Istoria paginii runda/1234_4321/clasament | Cod sursa (job #1011685) | Cod sursa (job #2039656) | Cod sursa (job #2357409) | Cod sursa (job #381643)
Cod sursa(job #381643)
#include<stdio.h>
char toc[2000001],mtb[2000001];
int path[2000001];
int main()
{
char ln=0,nr=0;
long long key=0,key2=0;
int ok,i,j;
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
gets(toc);
gets(mtb);
ok=1;
for(i=0;toc[i];++i)
{
ln++;
key+=toc[i]-'A';
key2+=mtb[i]-'A';
if(toc[i]!=mtb[i])
ok=0;
}
if(ok)
{
path[nr]=0;
++nr;
}
for(i=ln;mtb[i];++i)
{
key2+=mtb[i]-'A';
key2-=mtb[i-ln]-'A';
ok=1;
if(key2==key)
{
for(j=i-ln+1;j<=i;++j)
if(toc[j-(i-ln+1)]!=mtb[j])
{ok=0;break;}
if(ok)
{
path[nr]=i-ln;
nr++;
}
}
}
printf("%d\n",nr);
for(i=0;i<nr;++i)
printf("%d ",path[i]+1);
return 0;
}