Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. void QuickSort(int l, int r, double* mas, int* cnt) {
  5. if (r - l < 1) return;
  6. double x = mas[(l + r) / 2];
  7. int i = l, j = r;
  8. //cout << x << endl;
  9. while (i <= j) {
  10. while (mas[i] < x) i++;
  11. while (mas[j] > x) j--;
  12. if (i <= j) {
  13. swap (mas[i],mas[j]);
  14. swap (cnt[i],cnt[j]);
  15. i++;
  16. j--;
  17. }
  18. }
  19. if (j > l) QuickSort(l,j,mas,cnt);
  20. if (r > i) QuickSort(i,r,mas,cnt);
  21. }
  22. int n, k;
  23. bool ok(int m, double* mas, int* v, int* w){
  24. for (int i = 0; i < n; i++){
  25. mas[i] = v[i] - w[i] * m;
  26. }
  27. int cnt[n];
  28. for (int i = 0; i < n; i++){
  29. cnt[i] = i + 1;
  30. }
  31. QuickSort(0, n, mas, cnt);
  32. double sum = 0;
  33. int boorder = k;
  34. int j = n - 1;
  35. while (boorder > 0){
  36. sum += mas[j];
  37. j--;
  38. boorder--;
  39. }
  40. return sum >= 0.0;
  41. }
  42. void ok1(int m, double* mas, int* v, int* w, int* cnt){
  43. for (int i = 0; i < n; i++){
  44. mas[i] = v[i] - w[i] * m;
  45. }
  46. QuickSort(0, n, mas, cnt);
  47. }
  48. void QuickSort1(int l,int r, int* mas) {
  49. if (r - l < 1) return;
  50. int x = mas[(l + r) / 2];
  51. int i = l, j = r;
  52. while (i <= j) {
  53. while (mas[i] < x) i++;
  54. while (mas[j] > x) j--;
  55. if (i <= j) {
  56. swap (mas[i],mas[j]);
  57. i++;
  58. j--;
  59. }
  60. }
  61. if (j > l) QuickSort1(l,j,mas);
  62. if (r > i) QuickSort1(i,r,mas);
  63. }
  64. int main() {
  65. cin >> n >> k;
  66. int v[n], w[n];
  67. for (int i = 0; i < n; i++) {
  68. cin >> v[i] >> w[i];
  69. }
  70. int cnt[n];
  71. for (int i = 0; i < n; i++){
  72. cnt[i] = i + 1;
  73. }
  74. double mas [n];
  75. double l = 0;
  76. double r = 100000000;
  77. double m;
  78. for (int i = 0; i < 100; i++)
  79. {
  80. m = (l + r) / 2;
  81. if (ok(m, mas, v, w)) {
  82. l = m;
  83. } else r = m;
  84. }
  85. //mas[j] = l;
  86. //QuickSort(0, n - 1, mas, cnt);
  87. /*for (int i = 0; i < n; i++) {
  88. cout << cnt[i] << " ";
  89. }
  90. cout << endl;*/
  91. //reverse(cnt, cnt + n);
  92. ok1(r, mas, v, w, cnt);
  93. for (int i = 0; i < n; i++)
  94. cout << cnt[i] << " ";
  95. int finally[k];
  96. reverse (cnt, cnt + n);
  97. for (int i =0; i < k; i++){
  98. finally[i] = cnt[i];
  99. }
  100. QuickSort1(0, k - 1, finally);
  101. for (int i = 0; i < k; i++) {
  102. cout << finally[i] << endl;
  103. }
  104. return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement