Pagini recente » Cod sursa (job #1901258) | Cod sursa (job #823191) | Cod sursa (job #3234325) | Cod sursa (job #2310990) | Cod sursa (job #192707)
Cod sursa(job #192707)
#include <stdio.h>
#include <string.h>
int n,m,k,i,j,t,a[2000005],b[2000005],q,c[1005];
char x;
int main()
{
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
k=0;
while (1)
{
scanf("%c",&x);
if (x=='\n') break;
++k;
if (x>='0' && x<='9') b[k]=b[k-1]+(x-'0');
if (x>='A' && x<='Z') b[k]=b[k-1]+(x-'A')+10;
if (x>='a' && x<='z') b[k]=b[k-1]+(x-'a')+10+26;
}
n=0;
while (1)
{
scanf("%c",&x);
if (x=='\n') break;
++n;
if (x>='0' && x<='9') a[n]=a[n-1]+(x-'0');
if (x>='A' && x<='Z') a[n]=a[n-1]+(x-'A')+10;
if (x>='a' && x<='z') a[n]=a[n-1]+(x-'a')+10+26;
}
int sol=0;
for (i=k; i<=n; ++i)
if (b[k]==a[i]-a[i-k])
{
q=1;
for (j=1; j<=k; ++j) if (b[j]!=a[i-k+j]-a[i-k]) { q=0; break; }
if (q) ++sol;
if (q && sol<=1000) c[sol]=i-k;
}
printf("%d\n",sol);
for (i=1; i<=sol; ++i) { if (i>1000) break; printf("%d ",c[i]); }
return 0;
}