Pagini recente » Cod sursa (job #1094551) | Cod sursa (job #797963) | Cod sursa (job #2457200) | Cod sursa (job #2219627) | Cod sursa (job #2714288)
#include <fstream>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
string t, s;
int k, sol[2000000], p[2000000], L;
int main()
{
f >> s >> t;
for (int i=1; i<s.size(); i++){
while (L != 0 && s[L] != s[i])
L = p[L];
if (s[i] == s[L]) L ++;
p[i] = L;
}
L = 0;
for (int i=0; i<t.size(); i++){
while (L != 0 && s[L] != t[i]){
L = p[L];
}
if (t[i] == s[L]) L ++;
if (L == s.size()){
sol[++ k] = i - s.size() + 1;
L = p[L - 1];
}
}
g << k << '\n';
for (int i=1; i <= min(k, 1000); i++)
g << sol[i] << ' ';
}