fork(1) download
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<stdlib.h>
  5. #include<vector>
  6. using namespace std;
  7.  
  8. inline void add (string& str, int lo, int hi)
  9. {
  10. int j, carry=1;
  11.  
  12. for(j=hi; j>=lo && carry; j--)
  13. {
  14. if(str[j]=='9')
  15. {
  16. str[j]='0';
  17. carry=1;
  18. }
  19. else
  20. {
  21. str[j]=str[j]+'1'-'0';
  22. carry=0;
  23. }
  24. }
  25. return;
  26. }
  27. inline bool lesscheck(string str)
  28. {
  29. string rev;
  30. int i, l=str.size()-1;
  31. for(i=(l%2==0)?(l/2-1):(l/2);i>=0;i--)
  32. rev.push_back(str[i]);
  33. if(l%2 == 0 && rev > str.substr(l/2+1, l/2))
  34. return true;
  35. else if(l%2 == 1 && rev > str.substr(l/2+1, l/2+1))
  36. return true;
  37. else return false;
  38. }
  39. inline void recover (string& str)
  40. {
  41. int i, lo=0, hi=str.size()-1;
  42. for(i=lo; i<=hi/2; i++)
  43. str[hi-i]=str[i];
  44. }
  45. inline void endcase(string& str)
  46. {
  47. int l=str.size();
  48. str[0]='1';
  49. str.push_back('1');
  50. if(l%2==0)str[l/2]='0';
  51. return;
  52. }
  53. int main( )
  54. {
  55. int l, i, j,t, carry;
  56. string str;
  57. vector<string> ans;
  58. vector<string>::iterator it;
  59. scanf("%d", &t);
  60. for(i=0; i<t; i++)
  61. {
  62. cin >> str;
  63. l = str.size()-1;
  64. if(!lesscheck(str))
  65. {
  66. add(str, 0, l/2);
  67. if(str[0]=='0')
  68. endcase(str);
  69. recover(str);
  70. }
  71. else
  72. recover(str);
  73. ans.push_back(str);
  74. str.clear();
  75. }
  76. for(it=ans.begin(); it!=ans.end(); it++)
  77. cout << *it << endl;
  78. return 0;
  79. }
Success #stdin #stdout 0s 2868KB
stdin
2
808
2133
stdout
818
2222