using ll = long long;class Solution {public: int get_lt_palindrome(int n) { vector<int> q; while (n) { q.push_back(n % 10); n /= 10; } int m = q.size(); int j = m/2; while (q[j] == 0) { q[j++] = 9; } q[j]--; if (q[m - 1] == 0) { fill(q.begin(), q.end(), 9); m--; } for (int i = 0; i < m/2; i++) q[i] = q[m - 1 - i]; for (int i = 0; i < m; i++) { n *= 10; n += q[i]; } return n; } int get_gt_palindrome(int n) { vector<int> q; while (n) { q.push_back(n % 10); n /= 10; } int m = q.size(); int j = m/2; while (j < m && q[j] == 9) { q[j++] = 0; } if (j == m) { q.push_back(1); m++; } else { q[j]++; } for (int i = 0; i < m/2; i++) q[i] = q[m - 1 - i]; for (int i = 0; i < m; i++) { n *= 10; n += q[i]; } return n; } int get_palindrome(int n) { vector<int> q; while (n) { q.push_back(n % 10); n /= 10; } int m = q.size(); for (int i = 0; i < m/2; i++) q[i] = q[m - 1 - i]; for (int i = 0; i < m; i++) { n *= 10; n += q[i]; } return n; } // https://leetcode.com/problems/minimum-cost-to-make-array-equal-palindromic/ long long minimumCost(vector<int>& nums) { sort(nums.begin(), nums.end()); int n = nums.size(); int m = (n&1) ? nums[n/2] : (nums[n/2-1] + nums[n/2])/2; ll ans = 1e14; for (int p : {get_palindrome(m), get_gt_palindrome(m), get_lt_palindrome(m)}) { ll s = 0; for (int &d : nums) s += abs(d - p); ans = min(ans, s); } return ans; }};