fork(6) download
  1. using System;
  2. using System.Text;
  3.  
  4. namespace CSharpPlayground
  5. {
  6. public class Program
  7. {
  8. static void Main()
  9. {
  10. string[] txt = Console.ReadLine().Split(' ');
  11. string numberN = txt[0];
  12. string numberK = txt[1];
  13.  
  14. StringBuilder numberSB = new StringBuilder();
  15. for (int i = 0; i < numberN.Length; i++)
  16. numberSB.Append(numberN[i]);
  17.  
  18. int k = Int32.Parse(numberK);
  19. ulong n = ulong.Parse(numberN);
  20.  
  21. int[] digits = new int[numberN.Length];
  22. for (int i = 0; i < numberN.Length; i++)
  23. digits[i] = Int32.Parse(numberN[i].ToString());
  24.  
  25.  
  26. if (numberN.Length < k)
  27. {
  28. numberSB.Clear();
  29. for (int i = 0; i < k; i++)
  30. numberSB.Append(5);
  31.  
  32. Console.Write(numberSB);
  33. }
  34. else if (CountFivesOnUlong(n + 1) >= k)
  35. {
  36. Console.Write(n + 1);
  37. }
  38. else if(k == 1)
  39. {
  40. while(true)
  41. {
  42. n = n + 1;
  43. if(CountFivesOnUlong(n) >= 1)
  44. {
  45. Console.Write(n);
  46. break;
  47. }
  48. }
  49. }
  50. else
  51. {
  52. digits = AddZeroAtFirst(digits);
  53.  
  54. for(int i = digits.Length - 1; i > 0; i--)
  55. {
  56. if (Check(digits, n, k))
  57. break;
  58.  
  59. if (digits[i] < 5)
  60. {
  61. digits[i] = 5;
  62. if (Check(digits, n, k))
  63. {
  64. Console.Write(ConvertToUlong(digits));
  65. break;
  66. }
  67. }
  68. else if (digits[i] >= 5)
  69. {
  70. if (digits[i - 1] == 9)
  71. {
  72. digits[i] = 5;
  73. if (Check(digits, n, k))
  74. {
  75. Console.Write(ConvertToUlong(digits));
  76. break;
  77. }
  78.  
  79. for (int j = i - 1; j >= 0; j--)
  80. {
  81. if (digits[j] == 9)
  82. digits[j] = 0;
  83. else
  84. {
  85.  
  86. digits[j]++;
  87. break;
  88. }
  89. }
  90.  
  91. if (Check(digits, n, k))
  92. {
  93. Console.Write(ConvertToUlong(digits));
  94. break;
  95. }
  96. }
  97. else
  98. {
  99. digits[i - 1]++;
  100. digits[i] = 5;
  101.  
  102. if (Check(digits, n, k))
  103. {
  104. Console.Write(ConvertToUlong(digits));
  105. break;
  106. }
  107. }
  108. }
  109. }
  110. }
  111. }
  112.  
  113. private static int CountFives(int[] digits)
  114. {
  115. int sum = 0;
  116. for (int i = 0; i < digits.Length; i++)
  117. if (digits[i] == 5)
  118. sum++;
  119.  
  120. return sum;
  121. }
  122.  
  123. private static bool Check(int[] digits, ulong n, int k)
  124. {
  125. if (CountFives(digits) >= k && ConvertToUlong(digits) > n)
  126. return true;
  127. else
  128. return false;
  129. }
  130.  
  131. private static ulong ConvertToUlong(int[] digits)
  132. {
  133. string tmp = "";
  134. for(int i = 0; i < digits.Length; i++)
  135. {
  136. tmp += digits[i];
  137. }
  138.  
  139. return ulong.Parse(tmp);
  140. }
  141.  
  142. private static int[] AddZeroAtFirst(int[] digits)
  143. {
  144. int[] tmp = new int[digits.Length + 1];
  145. tmp[0] = 0;
  146. for (int i = 1; i < tmp.Length; i++)
  147. tmp[i] = digits[i - 1];
  148.  
  149. return tmp;
  150. }
  151.  
  152. private static int CountFivesOnUlong(ulong n)
  153. {
  154. int counter = 0;
  155. ulong number = n;
  156. while (number != 0)
  157. {
  158. if (number % 10 == 5)
  159. counter++;
  160.  
  161. number = number / 10;
  162. }
  163.  
  164. return counter;
  165. }
  166. }
  167. }
Success #stdin #stdout 0.01s 131520KB
stdin
959698787699999 5
stdout
959698787705555