Advertisement
Guest User

Untitled

a guest
Apr 29th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. #include <string>
  5. #include <stack>
  6. #include <set>
  7. #include <map>
  8. #include <unordered_map>
  9. #include <unordered_set>
  10. #include <queue>
  11. #include <sstream>
  12. #include <iterator>
  13. #include <iomanip>
  14. #include <cstdio>
  15. #include <climits>
  16. #include <cmath>
  17.  
  18. #define forn(i, n) for (int i = 0; i < (int) n; i++)
  19.  
  20. using namespace std;
  21.  
  22. typedef pair<int, int> oper;
  23.  
  24. int main()
  25. {
  26. ios_base::sync_with_stdio(false);
  27. int n, k;
  28. cin >> n >> k;
  29. vector <int> castle(n);
  30. forn(i, n)
  31. cin >> castle[i];
  32. vector <oper> ans;
  33. int max_height = INT_MIN;
  34. int min_height = INT_MAX;
  35. int max_ind = -1;
  36. int min_ind = -1;
  37. forn(j, n)
  38. if (castle[j] < min_height)
  39. {
  40. min_height = castle[j];
  41. min_ind = j;
  42. }
  43.  
  44. forn(j, n)
  45. if (castle[j] >= max_height && j != min_ind)
  46. {
  47. max_height = castle[j];
  48. max_ind = j;
  49. }
  50. int max_diff = max_height - min_height;
  51. forn(i, k)
  52. {
  53. if (max_ind == min_ind)
  54. continue;
  55. castle[min_ind]++;
  56. castle[max_ind]--;
  57. int ans_x = min_ind;
  58. int ans_y = max_ind;
  59.  
  60. max_height = INT_MIN;
  61. min_height = INT_MAX;
  62. max_ind = -1;
  63. min_ind = -1;
  64. forn(j, n)
  65. if (castle[j] < min_height)
  66. {
  67. min_height = castle[j];
  68. min_ind = j;
  69. }
  70.  
  71. forn(j, n)
  72. if (castle[j] >= max_height && j != min_ind)
  73. {
  74. max_height = castle[j];
  75. max_ind = j;
  76. }
  77. if (max_ind == min_ind)
  78. continue;
  79. if (castle[max_ind] - castle[min_ind] <= max_diff)
  80. {
  81. ans.push_back(make_pair(ans_y, ans_x));
  82. max_diff = castle[max_ind] - castle[min_ind];
  83. }
  84. else
  85. break;
  86. }
  87. cout << max_diff << " " << ans.size() << endl;
  88. forn(i, ans.size())
  89. cout << ans[i].first + 1 << " " << ans[i].second + 1 << endl;
  90. return 0;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement