fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define fast_io ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
  5.  
  6. #define int long long
  7. #define pb push_back
  8. #define endl '\n'
  9.  
  10. void solve() {
  11.  
  12. int a, n;
  13. cin >> a >> n;
  14.  
  15. vector<int> b(n);
  16.  
  17. for (int i = 0; i < n; i++)
  18. cin >> b[i];
  19.  
  20. sort(b.begin(), b.end());
  21.  
  22. int original = a;
  23.  
  24. vector<int> A;
  25.  
  26. if (a == 0)
  27. A.pb(0);
  28.  
  29. while (a > 0) {
  30. A.pb(a % 10);
  31. a /= 10;
  32. }
  33.  
  34. reverse(A.begin(), A.end());
  35.  
  36. int k = A.size();
  37.  
  38. int mn = b[0];
  39. int mx = b.back();
  40.  
  41. int p = 0, q = 0;
  42.  
  43. for (int i = 0; i < k; i++) {
  44. p = p * 10 + mn;
  45. q = q * 10 + mx;
  46. }
  47.  
  48. int ans = min(abs(original - p), abs(original - q));
  49.  
  50. int r = 0;
  51.  
  52. bool done = false;
  53.  
  54. for (int i = 0; i < k; i++) {
  55.  
  56. int cur = A[i];
  57.  
  58. int smaller = -1;
  59.  
  60. for (int d : b) {
  61. if (d < cur)
  62. smaller = d;
  63. }
  64.  
  65. if (smaller != -1) {
  66.  
  67. int temp = r;
  68.  
  69. temp = temp * 10 + smaller;
  70.  
  71. for (int j = i + 1; j < k; j++)
  72. temp = temp * 10 + mx;
  73.  
  74. if (!(to_string(temp).size() > 1 && to_string(temp)[0] == '0'))
  75. ans = min(ans, abs(original - temp));
  76. }
  77.  
  78. bool equal = false;
  79.  
  80. for (int d : b) {
  81. if (d == cur)
  82. equal = true;
  83. }
  84.  
  85. if (!equal) {
  86. done = true;
  87. break;
  88. }
  89.  
  90. r = r * 10 + cur;
  91. }
  92.  
  93. int s = 0;
  94.  
  95. done = false;
  96.  
  97. for (int i = 0; i < k; i++) {
  98.  
  99. int cur = A[i];
  100.  
  101. int greater = -1;
  102.  
  103. for (int d : b) {
  104. if (d > cur) {
  105. greater = d;
  106. break;
  107. }
  108. }
  109.  
  110. if (greater != -1) {
  111.  
  112. int temp = s;
  113.  
  114. temp = temp * 10 + greater;
  115.  
  116. for (int j = i + 1; j < k; j++)
  117. temp = temp * 10 + mn;
  118.  
  119. if (!(to_string(temp).size() > 1 && to_string(temp)[0] == '0'))
  120. ans = min(ans, abs(original - temp));
  121. }
  122.  
  123. bool equal = false;
  124.  
  125. for (int d : b) {
  126. if (d == cur)
  127. equal = true;
  128. }
  129.  
  130. if (!equal) {
  131. done = true;
  132. break;
  133. }
  134.  
  135. s = s * 10 + cur;
  136. }
  137.  
  138. int firstNonZero = -1;
  139.  
  140. for (int d : b) {
  141. if (d != 0) {
  142. firstNonZero = d;
  143. break;
  144. }
  145. }
  146.  
  147. if (k > 1 && firstNonZero != -1) {
  148.  
  149. int small = firstNonZero;
  150.  
  151. for (int i = 1; i < k - 1; i++)
  152. small = small * 10 + mx;
  153.  
  154. ans = min(ans, abs(original - small));
  155. }
  156.  
  157. if (firstNonZero != -1) {
  158.  
  159. int big = firstNonZero;
  160.  
  161. for (int i = 0; i < k; i++)
  162. big = big * 10 + mn;
  163.  
  164. ans = min(ans, abs(original - big));
  165. }
  166.  
  167. cout << ans << endl;
  168. }
  169.  
  170. int32_t main() {
  171.  
  172. fast_io;
  173.  
  174. int t;
  175. cin >> t;
  176.  
  177. while (t--) {
  178. solve();
  179. }
  180.  
  181. return 0;
  182. }
Success #stdin #stdout 0s 5328KB
stdin
4
0 2
0 1
11 2
1 2
222 2
3 4
3333 2
6 7
stdout
0
0
111
2656