Advertisement
Guest User

Untitled

a guest
Feb 17th, 2020
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.92 KB | None | 0 0
  1. #include<iostream>
  2. #include<string>
  3. #include<vector>
  4. #include<algorithm>
  5. using namespace std;
  6. int main() {
  7. long long a = 29, w;
  8. long long hasher = 1000000000 + 7;
  9. string s, s1;
  10. vector<long long>q;
  11. vector<long long>z;
  12. z.push_back(1);
  13. z.push_back(29);
  14. cin » s » s1;
  15. w = 0;
  16. q.push_back((s[0]-'a'+1) * a%hasher);
  17. for (int i = 0; i < s.size() - 1; i++)
  18. {
  19. a = a * 29 % hasher;
  20. z.push_back(a);
  21. q.push_back((q[i] + (s[i+1]-'a'+1) * a)%hasher);
  22. }
  23. a = 1;
  24. for (int i = 0; i < s1.size(); i++)
  25. {
  26. a = a * 29%hasher;
  27. w += ((s1[i]-'a'+1) * a%hasher)%hasher;
  28. w %= hasher;
  29. }
  30. for (int i = 0; i <= s.size() - s1.size(); i++)
  31. {
  32. if (i == 0)
  33. {
  34. if (q[i + s1.size() - 1] == w * z[i] %hasher)
  35. {
  36. cout « i « " ";
  37. }
  38. }
  39. else
  40. if ((q[i + s1.size()-1] - q[i-1]+hasher)%hasher == w * z[i] % hasher)
  41. cout « i « " ";
  42. }
  43. return 0;
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement