Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <vector>
  4. #include <cstdio>
  5. #include <string>
  6. #include <algorithm>
  7. #include <queue>
  8. #include <map>
  9. #include <set>
  10.  
  11. using namespace std;
  12.  
  13. bool cmp(pair <int, int> &a, pair <int, int> &b) {
  14. return a.second < b.second;
  15. }
  16.  
  17. int n, average;
  18. vector <pair<int, int>> d;
  19. vector <pair<int, int> > ans;
  20.  
  21. int bin_search(int l, int r, int value) {
  22. while (l < r) {
  23. int mid = l + (r - l) / 2;
  24. if (d[mid].second - value <= 0) {
  25. l = mid+1;
  26. }
  27. else {
  28. r = mid;
  29. }
  30. }
  31. return r;
  32. }
  33.  
  34. int main() {
  35. freopen("input.txt", "r", stdin);
  36. freopen("output.txt", "w", stdout);
  37. scanf("%d%d", &n, &average);
  38. ans = vector<pair<int, int>>(n, make_pair(0, 0));
  39. for (int i = 0; i < n; ++i) {
  40. int curd;
  41. scanf("%d", &curd);
  42. if (curd != average) {
  43. d.push_back(make_pair(i + 1, curd));
  44. }
  45. }
  46. sort(d.begin(), d.end(), cmp);
  47. for (int i = 0; i < d.size(); ++i) {
  48. if (d[i].second == average)
  49. break;
  50. else {
  51. int ind = bin_search(i+1, d.size(), average - d[i].second);
  52. ans[d[i].first - 1] = make_pair(d[ind].first, average - d[i].second);
  53. d[ind].second -= average - d[i].second;
  54. d[i].second = average;
  55. }
  56. }
  57. for (auto it : ans) {
  58. printf("%d %d\n", it.first, it.second);
  59. }
  60. return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement