Pagini recente » Cod sursa (job #2765984) | Arhiva de probleme | Cod sursa (job #3202025) | Cod sursa (job #3288362) | Cod sursa (job #1166056)
#include<fstream>
#include<cstring>
using namespace std;
#define max_n 2000010
ifstream f("strmatch.in");
ofstream g("strmatch.out");
char A[2*max_n] , B[max_n];
int LA , LB , P[2*max_n] , k , Sol[max_n] , fail;
void read(){
f>>A+1>>B;
LA = strlen(A+1);
LB = strlen(B);
A[LA+1] = '*';
strcpy( A + LA + 2 , B );
}
int main(){
read();
P[1] = 0;
for( int i = 2 ; i <= LA + LB + 1 ; i++ ){
fail = P[i-1];
while( A[fail+1] != A[i] && fail != 0 )
fail = P[fail];
if( A[fail+1] == A[i] )
P[i] = fail + 1;
if( P[i] == LA ){
Sol[++k] = i - 2 * LA - 1;
}
}
g<<k<<"\n";
for( int i = 1 ; i <= k ; i++ )
g<<Sol[i]<<" ";
return 0;
}