Advertisement
Guest User

Untitled

a guest
Jul 20th, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.94 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <map>
  5. #include <math.h>
  6. #include <stack>
  7. #include <queue>
  8. #include <iomanip>
  9. #include <set>
  10. #include <iterator>
  11. #include <string>
  12. #include <cstring>
  13. #include <string.h>
  14.  
  15. #pragma comment(linker, "/STACK:1000000000")
  16.  
  17. #define INF 1000000000
  18. #define MOD 1000000007
  19. #define EPS 1e-8
  20. #define pb push_back
  21. //#define mp make_pair
  22. #define f first
  23. #define s second
  24. #define all(xx) begin(xx), end(xx)
  25. #define rep(i, l, r) for (int i = l; i < r; i++)
  26. #define sz(v) (int)v.size()
  27.  
  28. using namespace std;
  29.  
  30. typedef long long ll;
  31. typedef double dbl;
  32. typedef long double ld;
  33. typedef pair <int, int> pii;
  34. typedef vector <int> vi;
  35. typedef vector <pii> vii;
  36. typedef vector <vi> vvi;
  37. typedef vector <string> vs;
  38. typedef map <int, int> mii;
  39. typedef stack <int> si;
  40.  
  41. string str;
  42. vi d1, d2;
  43.  
  44. int main() {
  45.     //cout << fixed << setprecision(10);
  46.     ios_base::sync_with_stdio(0);
  47.     cin.tie(0);
  48.     cout.tie(0);
  49.     //#ifdef LOCAL
  50. //  freopen("input1.txt", "r", stdin);
  51. //  freopen("output2.txt", "w", stdout);
  52.     //#endif
  53.     cin >> str;
  54.     int n = str.size();
  55.     d1.resize(n);
  56.     d2.resize(n);
  57.     int maxx = 0;
  58.     int imx = 0, but = 0;
  59.     int l = 0, r = -1;
  60.     for (int i = 0; i < n; i++) {
  61.         int k = (i > r ? 0 : min(d1[l + r - i], r - i + 1));
  62.         while (i + k < n && i - k >= 0 && str[i + k] == str[i - k])
  63.             k++;
  64.         d1[i] = k--;
  65.         if (maxx < d1[i]) {
  66.             maxx = d1[i];
  67.             imx = i;
  68.         }
  69.         if (i + k > r) {
  70.             l = i - k;
  71.             r = i + k;
  72.         }
  73.     }
  74.     l = 0, r = -1;
  75.     for (int i = 0; i < n; i++) {
  76.         int k = (i > r ? 0 : min(d2[l + r - i + 1], r - i + 1));
  77.         while (i + k < n && i - k > 0 && str[i - k - 1] == str[i + k]) {
  78.             k++;
  79.         }
  80.  
  81.         d2[i] = k;
  82.         if ((maxx <= d2[i] && !but) || d2[i] > maxx) {
  83.             maxx = d2[i];
  84.             imx = i;
  85.             but = 1;
  86.         }
  87.         if (i + k > r) {
  88.             l = i - k - 1;
  89.             r = i + k;
  90.         }
  91.     }
  92.     for (int i = imx - maxx - but + 1; i < imx + maxx; i++) {
  93.         cout << str[i];
  94.     }
  95.     return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement