fork(5) download
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <stdlib.h>
  4. #include <algorithm>
  5. #include <map>
  6. #include <queue>
  7. #include <iomanip>
  8. #include <string>
  9. #include <math.h>
  10. #include <limits>
  11. #include <map>
  12. #include <float.h>
  13. #include <limits.h>
  14. #include <string.h>
  15. using namespace std;
  16. #define rep(i,a,N) for(int i=a;i<N;++i)
  17.  
  18. string NextPalindrome(string result){
  19. int start=0,end=result.size()-1;
  20. string str=result;
  21. bool incr=false;
  22. while(start<end){
  23. if(str.at(end)<str.at(start))
  24. incr=true;
  25. str.at(end)=str.at(start);
  26. ++start;
  27. --end;
  28. }
  29. if(!incr){
  30. if(start>end){//even condition
  31. while(start>=0 && str.at(start)=='9')
  32. --start;
  33. if(start==-1){//all 9's
  34. rep(i,1,str.size()-1)
  35. str.at(i)='0';
  36. str.at(0)='0';
  37. str.at(str.size()-1)='1';
  38. str="1"+str;
  39. //str+="1";
  40. return str;
  41. }
  42. ++str.at(start);
  43. end=str.size()-start-1;
  44. str.at(end)=str.at(start);
  45. }
  46. else{//odd condition
  47. while(start>=0 && str.at(start)=='9')
  48. --start;
  49. if(start==-1){//all 9's
  50. rep(i,1,str.size()-1)
  51. str.at(i)='0';
  52. str.at(0)='0';
  53. str.at(str.size()-1)='1';
  54. str="1"+str;
  55. //str+="1";
  56. return str;
  57. }
  58. ++str.at(start);//=(char)((int)(str.at(start)-47));//increment the middle one
  59. end=str.size()-start-1;
  60. str.at(end)=str.at(start);
  61. }
  62. }
  63. return str;
  64. }
  65.  
  66. int main(){
  67. int T;
  68. string str;
  69. scanf("%d",&T);
  70. while(T--){
  71. cin>>str;
  72. cout<<NextPalindrome(str)<<endl;
  73. }
  74. return 0;
  75. }
Success #stdin #stdout 0s 3436KB
stdin
38
123246
1234246
123659
9999
9
129999931
139999921
100
10000001
1000001
1
9
919
333999
33999
33399
9911
9991
911
199
1999
9876
987
1
9
0
8008
8007
1234
101
102
999
9999
998
948
1000
100
10001
stdout
123321
1234321
124421
10001
11
139999931
139999931
101
10011001
1001001
2
11
929
334433
34943
33433
9999
9999
919
292
2992
9889
989
2
11
1
8118
8008
1331
111
111
1001
10001
999
949
1001
101
10101