Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<string>
- #include<vector>
- #include<algorithm>
- using namespace std;
- int main() {
- long long a = 29, w;
- long long hasher = 1000000000 + 7;
- string s, s1;
- vector<long long>q;
- vector<long long>z;
- z.push_back(1);
- z.push_back(29);
- cin » s » s1;
- w = 0;
- q.push_back((s[0]-'a'+1) * a%hasher);
- for (int i = 0; i < s.size() - 1; i++)
- {
- a = a * 29 % hasher;
- z.push_back(a);
- q.push_back((q[i] + (s[i+1]-'a'+1) * a)%hasher);
- }
- a = 1;
- for (int i = 0; i < s1.size(); i++)
- {
- a = a * 29%hasher;
- w += ((s1[i]-'a'+1) * a%hasher)%hasher;
- w %= hasher;
- }
- for (int i = 0; i <= s.size() - s1.size(); i++)
- {
- if (i == 0)
- {
- if (q[i + s1.size() - 1] == w * z[i] %hasher)
- {
- cout « i « " ";
- }
- }
- else
- if ((q[i + s1.size()-1] - q[i-1]+hasher)%hasher == w * z[i] % hasher)
- cout « i « " ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement