Advertisement
Guest User

Untitled

a guest
Feb 25th, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.89 KB | None | 0 0
  1. #include <iostream>
  2. #include <string.h>
  3.  
  4. using namespace std;
  5. int Manacher[100005], maxlen, maxpos;
  6. char v[100005];
  7. void Build_Manacher (int n)
  8. {
  9. int mij = 0;
  10. for (int i = 1; i <= n; ++i )
  11. {
  12. if (i > mij+Manacher[mij])
  13. {
  14. while (v[i+Manacher[i]+1] == v[i-Manacher[i]-1] && i - Manacher[i] > 1 && i + Manacher[i] < n )
  15. ++Manacher[i];
  16. mij = i;
  17. }
  18. else
  19. {
  20. Manacher[i] = min ((mij+Manacher[mij])-i, Manacher[mij - (i-mij)]);
  21. while ( v[i+Manacher[i]+1] == v[i-Manacher[i]-1] && i-Manacher[i] > 1 && i + Manacher[i] < n )
  22. ++Manacher[i];
  23. if (mij+Manacher[mij] <= i+Manacher[i])
  24. mij = i;
  25. }
  26. cout<<(Manacher[i]*2+1)<<" ";
  27. }
  28. }
  29. int main()
  30. {
  31. cin >> (v+1);
  32. int n = strlen (v+1);
  33. Build_Manacher(n);
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement