Advertisement
pb_jiang

LC 411 T3

Aug 17th, 2024
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.12 KB | None | 0 0
  1. class Solution {
  2.     string ans;
  3.     vector<int> mv;
  4.     using a10i = array<int, 10>;
  5.     vector<a10i> c2;
  6.    
  7.     bool search(int beg, int end, int mod, int k) {
  8.         if (beg > end) return mod == 0;
  9.         if (c2[beg][mod] != 0) return c2[beg][mod] == 1;
  10.  
  11.         for (char i = '9'; i >= '0'; --i) {
  12.             int d = i - '0';
  13.             int nm = 0;
  14.             if (beg == end) {                
  15.                 nm = (mod + d * mv[beg]) % k;
  16.             } else {
  17.                 nm = (mod + d * (mv[beg] + mv[end])) % k;
  18.             }
  19.            
  20.             if (search(beg + 1, end - 1, nm, k)) {
  21.                 ans[beg] = ans[end] = i;
  22.                 c2[beg][mod] = 1;
  23.                 return true;
  24.             }
  25.         }
  26.         c2[beg][mod] = 2;
  27.         return false;
  28.     }
  29.    
  30. public:
  31.     string largestPalindrome(int n, int k) {
  32.         mv = vector<int>(n);
  33.         mv[0] = 1;
  34.         for (int i = 1; i < n; ++i)
  35.             mv[i] = mv[i - 1] * 10 % k;
  36.         c2 = vector<a10i>((n + 1) / 2);
  37.         ans = string(n, '9');
  38.         search(0, n - 1, 0, k);
  39.         return ans;
  40.     }
  41. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement