fork(1) download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. string change_center(string x, bool bigger)
  5. {
  6. int len = x.length();
  7. if (len%2==0)
  8. {
  9. if (bigger)
  10. {
  11. int index = len/2-1;
  12. if(x[index]=='9' and x[abs(index-len)-1]=='9')
  13. {
  14. while (x[index]=='9' and x[abs(index-len)-1]=='9' and index>0)
  15. {
  16. x[index] = x[abs(index-len)-1] = '0';
  17. --index;
  18. }
  19. if (x[index]=='9') return "1" + string(len-1, '0') + "1";
  20. x[index] = x[abs(index-len)-1] = to_string((x[index]-'0')+1)[0];
  21. }
  22. else
  23. {
  24. if (x[len/2-1]>x[len/2]) x[len/2] = x[len/2-1];
  25. else x[len/2] = x[len/2-1] = to_string((x[len/2-1]-'0')+1)[0];
  26. }
  27. return x;
  28. }
  29. else
  30. {
  31. if (x[len/2]==x[len/2-1]) return x;
  32. else if (x[len/2-1]-'0'>x[len/2]-'0') x[len/2] = x[len/2-1];
  33. else x[len/2] = x[len/2-1] = to_string((x[len/2-1]-'0')+1)[0];
  34. return x;
  35. }
  36. }
  37. else
  38. {
  39. if (bigger)
  40. {
  41. int index = len/2;
  42. while(x[index]=='9' and x[abs(index-len)-1]=='9' and index>0)
  43. {
  44. x[index] = x[abs(index-len)-1] = '0';
  45. --index;
  46. }
  47. if (x[index]=='9') return "1" + string(len-1, '0') + "1";
  48. x[index] = x[abs(index-len)-1] = to_string((x[index]-'0')+1)[0];
  49. }
  50. return x;
  51. }
  52. return x;
  53. }
  54.  
  55. bool bigger(string a, string b)
  56. {
  57. for (int i = 0; i < a.length(); ++i)
  58. {
  59. if (a[i]-'0'>b[i]-'0') return 1;
  60. }
  61. return 0;
  62. }
  63.  
  64. string next_pal(string x)
  65. {
  66. int len = x.length();
  67. string ret;
  68. if (len%2==0)
  69. {
  70. if (len==2)
  71. {
  72. for (int i = stoi(x)+1; i < stoi(x)*100; ++i)
  73. {
  74. string y = to_string(i);
  75. if (y==string(y.rbegin(), y.rend())) return y;
  76. }
  77. }
  78. string l = string(x.begin(), x.begin()+len/2-1);
  79. string r = string(x.begin()+len/2+1, x.end());
  80. string l2 = string(l.rbegin(), l.rend());
  81. if (bigger(r, l2)) return change_center(l+x[len/2-1]+x[len/2]+l2, 1);
  82. else return change_center(l+x[len/2-1]+x[len/2]+l2, 0);
  83. }
  84. else
  85. {
  86. if (len==1)
  87. {
  88. if (x[0]=='9') return "10";
  89. else return to_string((x[0]-'0')+1);
  90. }
  91. string l = string(x.begin(), x.begin()+len/2);
  92. string r = string(x.begin()+len/2+1, x.end());
  93. string l2 = string(l.rbegin(), l.rend());
  94. if (bigger(r, l2)) return change_center(l+x[len/2]+l2, 1);
  95. else return change_center(l+x[len/2]+l2, 0);
  96. }
  97. return x;
  98. }
  99.  
  100. int main()
  101. {
  102. ios_base::sync_with_stdio(0);
  103. cin.tie(0); cout.tie(0);
  104. int t; cin >> t;
  105. while (t--)
  106. {
  107. string x; cin >> x;
  108. cout << next_pal(x) << '\n';
  109. }
  110. }
Runtime error #stdin #stdout #stderr 0s 15248KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
terminate called after throwing an instance of 'std::length_error'
  what():  basic_string::_M_create