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.  
  21. cin >> N >> num_K;
  22.  
  23. for (int i = 0; i < num_K; i++) {
  24. cin >> K[i];
  25. }
  26.  
  27. sort(K, K + num_K, greater<int>());
  28.  
  29. N_digits = digit_decomp(N, digits);
  30.  
  31. bool sw0 = false, sw1 = false;
  32. for (int i = N_digits - 1; i >= 0; i--) {
  33. for (int j = 0; j < num_K; j++) {
  34. if (sw1) {
  35. digits[i] = K[j];
  36. break;
  37. }
  38. if (digits[i] == K[j]) {
  39. if (i > 0 && digits[i - 1] >= K[num_K - 1]) {
  40. break;
  41. }
  42. }
  43. if (digits[i] > K[j]) {
  44. digits[i] = K[j];
  45. sw1 = true;
  46. break;
  47. }
  48. if (j == num_K - 1) {
  49. sw0 = true;
  50. }
  51. }
  52. if (sw0) {
  53. sw0 = false;
  54. sw1 = true;
  55. continue;
  56. }
  57. cout << digits[i];
  58. }
  59.  
  60. return 0;
  61. }
Success #stdin #stdout 0s 5320KB
stdin
343120 3
3 5 4
stdout
34555