Advertisement
Pechckin

Untitled

Oct 17th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. import sys
  2.  
  3. def partition(a, l, r):
  4. el = a[(l + r) // 2]
  5. i, j = l, r
  6. while i <= j:
  7. while a[i] < el:
  8. i += 1
  9. while a[j] > el:
  10. j -= 1
  11. if i >= j:
  12. break
  13. a[i], a[j] = a[j], a[i]
  14. if a[i] != el:
  15. i += 1
  16. if a[j] != el:
  17. j -= 1
  18. return j
  19.  
  20.  
  21. def order(a, k):
  22. l, r = 0, len(a) - 1
  23. while True:
  24. m = partition(a, l, r)
  25. if m == k:
  26. return a
  27. elif m > k:
  28. r = m
  29. else:
  30. l = m + 1
  31.  
  32. def main():
  33. n, k = list(map(lambda x: int(x), sys.stdin.readline().split()))
  34. max_wv, w, v, mb_ans = 0, [], [], None
  35. for _ in range(n):
  36. v_i, w_i = list(map(lambda x: int(x), sys.stdin.readline().split()))
  37. v.append(v_i), w.append(w_i)
  38. max_wv = max(max_wv, v_i / w_i)
  39. l, r = 0, max_wv
  40. check = None
  41. for i in range(47):
  42. m = (l + r) / 2
  43. check = order([(v[i] - m * w[i], i + 1) for i in range(n)], n - k)[n - k:]
  44. ans = sum([i[0] for i in check])
  45. if ans > 1e-7:
  46. l = m
  47. else:
  48. r = m
  49. sys.stdout.write(' '.join(map(str, [i[1] for i in check])))
  50.  
  51.  
  52. if __name__ == '__main__':
  53. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement