Advertisement
prakharvk

next smaller palindrome

Aug 10th, 2019
552
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.65 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. vector<int> nextPalin(vector<int>&num){
  4.     int n=num.size();
  5.     int mid=n/2;
  6.     int i=mid-1;
  7.     int j;
  8.     n%2 ? j=mid+1 : j=mid;
  9.     // cout<<i<<" "<<j<<endl;
  10.     while(i>=0&&j<n&&num[i]==num[j]){
  11.         i--;
  12.         j++;
  13.     }
  14.     bool leftSmaller=false;
  15.     if(i<0||num[i]<num[j])
  16.         leftSmaller=true;
  17.     while(i>=0&&j<n){
  18.         num[j]=num[i];
  19.         i--;
  20.         j++;
  21.     }    
  22.         // cout<<i<<" "<<j<<endl;
  23.  
  24.     if(leftSmaller){
  25.         int carry=1;
  26.         i=mid-1;
  27.         if(n%2){
  28.             num[mid]+=(carry);
  29.             carry=num[mid]/10;
  30.             num[mid]=num[mid]%10;
  31.             j=mid+1;
  32.            
  33.         }
  34.         else
  35.             j=mid;
  36.         while(i>=0){
  37.             num[i]+=carry;
  38.             carry=num[i]/10;
  39.             num[i]=num[i]%10;
  40.             num[j]=num[i];
  41.             i--;
  42.             j++;
  43.         }    
  44.     }
  45.     return num;
  46.    
  47. }
  48. bool all9s(vector<int>&num){
  49.     int n=num.size();
  50.     for(int i=0;i<n;i++)
  51.         if(num[i]!=9)
  52.             return false;
  53.     return true;        
  54. }
  55. vector<int> allAre9s(vector<int>&num){
  56.     int n=num.size();
  57.     vector<int>ans(n+2);
  58.     ans[0]=1;
  59.     ans[n+1]=1;
  60.     for(int i=0;i<n;i++)
  61.         ans[i+1]=0;
  62.     return ans;    
  63. }
  64. int main() {
  65.     int t;
  66.     cin>>t;
  67.     while(t--){
  68.         string s;
  69.         cin>>s;
  70.         int n=s.size();
  71.         vector<int>num(n);
  72.         for(int i=0;i<n;i++){
  73.             num[i]=s[i]-'0';
  74.         }
  75.        
  76.         vector<int>ans;
  77.         if(all9s(num))
  78.             ans=allAre9s(num);
  79.         else
  80.             ans=nextPalin(num);
  81.         string a="";
  82.         for(int i=0;i<ans.size();i++){
  83.             a+=(ans[i]+'0');
  84.         }
  85.         cout<<a<<endl;
  86.        
  87.     }
  88.     return 0;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement