fork download
  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5. int digit_decomp(int num, int digits[]) {
  6. int i;
  7. for (i = 0; num; i++) {
  8. digits[i] = num % 10;
  9. num /= 10;
  10. }
  11. return i;
  12. }
  13.  
  14. int main() {
  15. int N = 0;
  16. int K[3] = { 0 };
  17. int N_digits = 0;
  18. int num_K = 0;
  19. int digits[9] = { 0 };
  20. int ans[9] = { 0 };
  21.  
  22. cin >> N >> num_K;
  23.  
  24. for (int i = 0; i < num_K; i++) {
  25. cin >> K[i];
  26. }
  27.  
  28. sort(K, K + num_K, greater<int>());
  29.  
  30. N_digits = digit_decomp(N, digits);
  31.  
  32. bool sw0 = false, sw1 = false;
  33. for (int i = N_digits - 1; i >= 0; i--) {
  34. for (int j = 0; j < num_K; j++) {
  35. if (sw1) {
  36. ans[i] = K[j];
  37. break;
  38. }
  39. if (digits[i] == K[j]) {
  40. if (i > 0 && digits[i - 1] >= K[num_K - 1]) {
  41. ans[i] = K[j];
  42. break;
  43. }
  44. }
  45. if (digits[i] > K[j]) {
  46. ans[i] = K[j];
  47. sw1 = true;
  48. break;
  49. }
  50. if (j == num_K - 1) {
  51. sw0 = true;
  52. }
  53. }
  54. if (sw0) {
  55. sw0 = false;
  56. for (int j = 1; i + j < N_digits; j++) {
  57. if (ans[i + j] != K[num_K - 1]) {
  58. i = i + j;
  59. cout << i << endl;
  60. for (int k = 2; k < num_K; k++) {
  61. cout << ans[i] << endl << K[num_K - k] << endl << K[num_K - k] << "tr\n";
  62. if (ans[i] == K[num_K - k]) {
  63. ans[i] = K[num_K - k + 1];
  64. cout << ans[i] << "\n";
  65. sw1 = true;
  66. break;
  67. }
  68. }
  69. break;
  70. }
  71. }
  72. if (!sw1) {
  73. cout << "gogo\n";
  74. N_digits -= 1;
  75. i = N_digits;
  76. sw1 = true;
  77. }
  78. }
  79. }
  80.  
  81. for (int i = N_digits - 1; i >= 0; i--) {
  82. cout << ans[i];
  83. }
  84. return 0;
  85. }
Success #stdin #stdout 0.01s 5320KB
stdin
7654321 2
6 7
stdout
6
gogo
777777