zhukov000

26_events

Feb 12th, 2022
1,076
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.77 KB | None | 0 0
  1. a = []
  2. with open("26-66.txt") as file:
  3.   n, k = map(int, file.readline().split())
  4.   for row in file:
  5.     x, y = map(int, row.split())
  6.     a.append( (x, y) )
  7. """
  8. n = 6
  9. k = 1000
  10. a = [
  11.  (1300, 2200),
  12.  (0, 1300),
  13.  (1300, 5700),
  14.  (0, 0),
  15.  (5000, 0),
  16.  (1800, 3400)
  17. ]
  18. """
  19.  
  20. """
  21.  events - массив событий, каждый запрос (s, f) - это 2 события
  22.  (s, +1) - увеличить количество задач в момент времени s
  23.  (f, -1) - уменьшить количество задач в момент времени f
  24. """
  25. events = []
  26. for i in range(n):
  27.   st, fn = a[i]
  28.   events.append( (st, 1) )
  29.   if fn > 0: # если задача окончилась до конца суток
  30.     events.append( (fn, -1) )
  31.  
  32. events.sort() # сортируем события, чтобы обрабатывать их по очереди
  33.  
  34. # Посчитаем количество запросов, которые начались до k и еще не закончились
  35. cnt = 0
  36. i = 0
  37. while i < len(events):
  38.   if events[i][0] > k:
  39.     break
  40.   cnt += events[i][1]
  41.   i += 1
  42.  
  43. # массив уникальных времен и количества одновременных запросов в эти времена
  44. b = [ [k, cnt]]
  45. while i < len(events):
  46.   cnt += events[i][1]
  47.   if events[i][0] == b[-1][0]:
  48.     b[-1][1] = cnt
  49.   else:
  50.     b.append( [events[i][0], cnt] )
  51.   i += 1
  52.  
  53. # находим минимальное количество одновременных запросов
  54. mn = n
  55. for i in range(len(b)):
  56.   if b[i][1] < mn:
  57.     mn = b[i][1]
  58.  
  59. # находим суммарное время
  60. s = 0
  61. for i in range(0, len(b)-1):
  62.   if b[i][1] == mn:
  63.     s += (b[i+1][0] - b[i][0])
  64. print(mn, s)
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
Advertisement
Add Comment
Please, Sign In to add comment