Pagini recente » Cod sursa (job #2162041) | Cod sursa (job #1588534) | Cod sursa (job #1413703) | Cod sursa (job #1404372) | Cod sursa (job #2538337)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ( "strmatch.in" );
ofstream fout ( "strmatch.out" );
void read ( );
void preprocess ( );
void solve ( );
string pat;
string cuvant;
vector < int > v;
int main ( )
{
read ( );
preprocess ( );
solve ( );
}
void solve ( )
{
int k = 0;
int lng = cuvant.size();
int lg = pat.size();
int j = 0;
for ( int i = 0; i < lng; i++ )
{
if ( cuvant[i] == pat[j] )
{
if ( j == lg-1 )
{
fout << i - j << ' ';
k++;
if(k == 1000)
exit(0);
j = v[j];
}
else
j++;
}
else
{
while ( j && pat[j]!= cuvant[i] )
j = v[j-1];
if ( pat[j] == cuvant[i] )
j++;
}
}
}
void preprocess ( )
{
int lng = pat.size();
v.reserve ( lng+1 );
v[0] = 0;
int j = 0;
for ( int i = 1; i < lng; i++ )
{
if ( pat[j] == pat[i] )
{
v[i] = j + 1;
j++;
}
else
{
while ( j && pat[j] != pat[i] )
j = v[j-1];
if ( pat[j] == pat[i] )
{
v[i] = j + 1 ;
j++;
}
else
v[i] = 0;
}
}
}
void read ( )
{
getline ( fin, pat );
getline ( fin, cuvant );
}