Pagini recente » Cod sursa (job #873712) | Cod sursa (job #1345258) | Cod sursa (job #1276383) | Cod sursa (job #3258866) | Cod sursa (job #2576460)
#include <bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pli pair<ll,int>
#define pil pair<int,ll>
#define fi first
#define se second
#define inf (INT_MAX/2-1)
#define infl (1LL<<60)
#define vi vector<int>
#define vl vector<ll>
#define pb push_back
#define sz(a) (int)(a).size()
#define all(a) begin(a),end(a)
#define y0 y5656
#define y1 y7878
#define aaa system("pause");
#define dbg(x) cerr<<(#x)<<": "<<(x)<<'\n',aaa
#define dbga(x,n) cerr<<(#x)<<"[]: ";for(int _=0;_<n;_++)cerr<<x[_]<<' ';cerr<<'\n',aaa
#define dbgs(x) cerr<<(#x)<<"[stl]: ";for(int _:x)cerr<<_<<' ';cerr<<'\n',aaa
#define dbgp(x) cerr<<(#x)<<": "<<x.fi<<' '<<x.se<<'\n',aaa
#define maxn 2000000
using namespace std;
ifstream fin ("strmatch.in");
ofstream fout ("strmatch.out");
string pat, txt;
int n, m;
int lps[maxn+5];
vi ans;
int main () {
fin >> pat >> txt;
m = sz(pat); n = sz(txt);
int i, j, z, len = 0;
lps[0] = 0; i = 1;
while (i < m) {
if (pat[i] == pat[len]) lps[i++] = ++len;
else if (len > 0) len = lps[len-1];
else lps[i++] = 0;
}
i = j = 0;
while (i < n) {
if (txt[i] == pat[j]) i++, j++;
if (j == m) {
ans.pb(i-m);
j = lps[m-1];
} else if (i < n && pat[j] != txt[i]) {
if (j > 0) j = lps[j-1];
else i++;
}
}
fout << sz(ans) << '\n';
for (i = 0; i < min(1000, sz(ans)); i++) fout << ans[i] << ' ';
fin.close(); fout.close();
return 0;
}