Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Dai Ca Di Hoc
- #include <bits/stdc++.h>
- #define sz(x) int(x.size())
- #define reset(x) memset(x, 0,sizeof(x))
- #define MIN(x,y) if (x > (y)) x = (y)
- #define MAX(x,y) if (x < (y)) x = (y)
- #define PB push_back
- #define mp make_pair
- #define F first
- #define S second
- #define Task "foundstring"
- #define maxn 1000005
- #define MOD 1000000007
- #define remain(x) if (x > MOD) x -= MOD
- #define pii pair<int, int>
- using namespace std;
- string A, B;
- int n, m;
- const int Base = 101;
- const long long MM = 1ll * MOD * MOD;
- long long H[maxn], S[maxn];
- int main()
- {
- ios_base::sync_with_stdio(0);
- freopen(Task".inp", "r", stdin);
- freopen(Task".out", "w", stdout);
- cin >> B >> A;
- m = A.length(); A = " " + A;
- n = B.length(); B = " " + B;
- H[0] = 1;
- for (int i = 1; i <= m; i++) H[i] = (H[i-1] * Base) % MOD;
- long long Sb = 0;
- for (int i = 1; i <= n; i++) Sb = (Sb * Base + B[i]) % MOD;
- S[0] = 0;
- for (int i = 1; i <= m; i++) S[i] = (S[i-1] * Base + A[i]) % MOD;
- int res = 0;
- for (int r = n; r <= m; r++){
- int l = r - n + 1;
- long long Sa = (S[r] - S[l-1] * H[n] + MM) % MOD;
- res += (Sa == Sb);
- }
- cout << res << "\n";
- for (int r = n; r <= m; r++){
- int l = r - n + 1;
- long long Sa = (S[r] - S[l-1] * H[n] + MM) % MOD;
- if (Sa == Sb) cout << l << " ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement