Advertisement
ibragimova_mariam

G. Модный номер

Feb 15th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. void fast_io() { ios_base::sync_with_stdio(false); cin.tie(0); }
  5.  
  6. unsigned long long gcd(unsigned long long a, unsigned long long b) {
  7. if(b == 0)
  8. return a;
  9. else
  10. return gcd(b, a % b);
  11. }
  12.  
  13. int main () {
  14. fast_io();
  15.  
  16. int n, k;
  17. cin >> n >> k;
  18.  
  19. string s;
  20. cin >> s;
  21.  
  22. map<int, int> m;
  23. for(int i = 0; i < n; i++) {
  24. m[s[i] - '0']++;
  25. }
  26.  
  27. int sum = INT_MAX;
  28. char number;
  29. int diff = 0;
  30. for(auto& item : m)
  31. {
  32. int temp_diff = 0;
  33. int temp_sum = 0;
  34. int temp_k = k;
  35. temp_k -= m[item.first];
  36. if(temp_k > 0) {
  37. int l = item.first - 1;
  38. int r = item.first + 1;
  39. while(true)
  40. {
  41. if(l >= 0) {
  42. int temp_del = min(m[l], temp_k);
  43. temp_k -= temp_del;
  44. temp_sum += temp_del * (item.first - l);
  45. if(m[l] != 0)
  46. temp_diff = item.first - l;
  47. l--;
  48. }
  49. if(temp_k <= 0)
  50. break;
  51. if(r <= 9)
  52. {
  53. int temp_del = min(m[r], temp_k);
  54. temp_k -= temp_del;
  55. temp_sum += temp_del * (r - item.first);
  56. if(m[r] != 0)
  57. temp_diff = r - item.first;
  58. r++;
  59. }
  60. if(temp_k <= 0)
  61. break;
  62. }
  63. }
  64. if(temp_sum < sum)
  65. {
  66. sum = temp_sum;
  67. diff = temp_diff;
  68. number = item.first + '0';
  69. }
  70. }
  71.  
  72. cout << sum << endl;
  73.  
  74. for(int i = 0; i < n; i++) {
  75. if(k != 0) {
  76. if(abs(s[i] - number) <= diff)
  77. s[i] = number;
  78.  
  79. if(s[i] == number)
  80. {
  81. k--;
  82. }
  83. }
  84. cout << s[i];
  85. }
  86.  
  87. return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement