Pagini recente » Cod sursa (job #1053984) | Cod sursa (job #1187232) | Diferente pentru blog/viata-dupa-olimpiade-2 intre reviziile 1 si 12 | Rating Oancea Stefan (stefanoancea) | Cod sursa (job #778899)
Cod sursa(job #778899)
#include<iostream>
#include<fstream>
#include<bitset>
#include<string.h>
using namespace std;
char a[2000002],b[2000002];
bitset <200001> d;
long long v[2000002];
int p[201],poz[1001];
inline void ciur(int n)
{
int i,j;
for(i=2;i*i<=n;i++)
if(d[i]==0)
for(j=i*i;j<=n;j=j+i)
d[j]=1;
}
int main ()
{
int i,n,m,nr;
long long s;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
f>>a>>b;
f.close();
n=strlen(a);
m=strlen(b);
for(i=n;i>=1;i--)
a[i]=a[i-1];
for(i=m;i>=1;i--)
b[i]=b[i-1];
ciur(100000);
for(i=100000;p[0]<200;i++)
if(d[i]==0)
p[++p[0]]=i;
s=0;
cout<<p['A']<<" "<<p['B']<<" "<<p['C'];
for(i=1;i<=n;i++)
s=0LL+s+p[a[i]];
for(i=1;i<=m;i++)
v[i]=0LL+v[i-1]+p[b[i]];
nr=0;
for(i=n;i<=m;i++)
if(v[i]-v[i-n]==s) {
nr++;
if(nr<=1000)
poz[nr]=i-n;
}
g<<nr<<'\n';
for(i=1;i<=nr && i<=1000;i++)
g<<poz[i]<<" ";
g.close();
return 0;
}