Pagini recente » Cod sursa (job #349767) | Cod sursa (job #1282297) | Cod sursa (job #1090314) | Cod sursa (job #2069144) | Cod sursa (job #2294189)
#include <iostream>
#include <fstream>
#include <string.h>
#include<stdio.h>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
char v1[2000010],v2[2000010];
int n,m=1,p=1,sum,valori[10000],s[2000010],sol[1010],nrs=1;
int main(){
fin>>v1;
n=strlen(v1);
//m=strlen(v2);
for(int i=0;i<n;i++){
if(valori[v1[i]-'0']==0){
valori[v1[i]-'0']=p;
sum+=p;
p++;
}
else
sum+=valori[v1[i]-'0'];
}
while(fin>>v2[m]){
if(valori[v2[m]-'0']!=0)
s[m]=s[m-1]+valori[v2[m]-'0'];
else
s[m]=0;
m++;
}
for(int i=1;i<=m-n;i++){
if(s[i]!=0)
if(s[i+n-1]-s[i]+1==sum){
int q=1;
for(int j=0;j<m;j++)
if(v2[i+j]==v1[j])
q++;
else
break;
if(q-1==n){
if(nrs<=1000){
sol[nrs]=i-1;
nrs++;
}
else
nrs++;
}
}
}
fout<<nrs-1<<"\n";
for(int i=1;i<=nrs;i++)
if(i>1000)
break;
else
fout<<sol[i]<<" ";
return 0;
}