Iamtui1010

palinnum

Dec 1st, 2021 (edited)
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.33 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstdio>
  3.  
  4. #define long long long
  5. #define nln '\n'
  6.  
  7. using namespace std;
  8.  
  9. bool palindrome(string str)
  10. {
  11.     long lef = 0, rig = str.size()-1;
  12.     while (lef <= rig)
  13.     {
  14.         if (str[lef] != str[rig])
  15.             return 0;
  16.         ++lef; --rig;
  17.     }
  18.     return 1;
  19. }
  20.  
  21. void process(string &str, long lef, long rig)
  22. {
  23.     if (palindrome(str))
  24.     {
  25.         while (str[lef] == '9' && lef >= 0 && rig < str.size())
  26.         {
  27.             --lef; ++rig;
  28.         }
  29.         if (lef >= 0)
  30.         {
  31.             str[lef] = (char)((long)str[lef]+1);
  32.             str[rig] = str[lef];
  33.             long l, r;
  34.             if ((long)str.size() % 2 == 1)
  35.                 l = (long)str.size()/2, r = (long)str.size()/2;
  36.             else
  37.                 l = (long)str.size()/2-1, r = (long)str.size()/2;
  38.             while (l > lef && r < rig)
  39.             {
  40.                 str[l] = '0';
  41.                 str[r] = '0';
  42.                 --l; ++r;
  43.             }
  44.         }
  45.         else
  46.         {
  47.             if (str.size() % 2 == 0)
  48.             {
  49.                 str.insert(str.begin()+str.size()/2, '0');
  50.                 for (long i = 0; i != str.size(); ++i)
  51.                     str[i] = '0';
  52.                 str[0] = '1'; str[str.size()-1] = '1';
  53.             }
  54.             else
  55.             {
  56.                 for (long i = 0; i != str.size(); ++i)
  57.                     str[i] = '0';
  58.                 str[0] = '1';
  59.                 str += '1';
  60.             }
  61.         }  
  62.         return;
  63.     }
  64.     bool ok = 0;
  65.     while (lef >= 0 && rig < str.size())
  66.     {
  67.         if (!ok)
  68.         {
  69.             if (str[lef] != str[rig])
  70.             {
  71.                 ok = 1;
  72.                 if (str[lef] > str[rig])
  73.                 {
  74.                     str[rig] = str[lef];
  75.                 }
  76.                 else
  77.                 if (str[lef] < str[rig])
  78.                 {
  79.                     long l, r;
  80.                     if (str.size() % 2 == 0)
  81.                     {
  82.                         l = str.size()/2-1;
  83.                         r = str.size()/2;
  84.                     }
  85.                     else
  86.                     {
  87.                         l = str.size()/2;
  88.                         r = str.size()/2;
  89.                     }
  90.                     while (str[l] == '9' && l >= 0)
  91.                     {
  92.                         --l; ++r;
  93.                     }
  94.                     str[l] = (char)((long)str[l]+1);
  95.                     str[r] = str[l];
  96.                     str[rig] = str[lef];
  97.                     ++l; --r;
  98.                     while (l <= r)
  99.                     {
  100.                         str[l] = '0';
  101.                         str[r] = '0';
  102.                         ++l; --r;
  103.                     }
  104.                 }
  105.             }
  106.         }
  107.         else
  108.         {
  109.             str[rig] = str[lef];
  110.         }
  111.         --lef; ++rig;
  112.     }
  113. }
  114.  
  115. int main()
  116. {
  117.     //freopen("palinnum.inp", "r", stdin);
  118.     //freopen("palinnum.out", "w", stdout);
  119.     long t;
  120.     cin >> t;
  121.     for (long i = 1; i <= t; ++i)
  122.     {
  123.         string str;
  124.         cin >> str;
  125.         while (str[0] == '0')
  126.             str.erase(0, 1);
  127.         if ((long)str.size() % 2 == 1)
  128.             process(str, (long)str.size()/2, (long)str.size()/2);
  129.         else
  130.             process(str, (long)str.size()/2-1, (long)str.size()/2);
  131.         cout << str << nln;
  132.     }
  133.     return 0;
  134. }
Add Comment
Please, Sign In to add comment