Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- a = []
- with open("26-66.txt") as file:
- n, k = map(int, file.readline().split())
- for row in file:
- x, y = map(int, row.split())
- a.append( (x, y) )
- """
- n = 6
- k = 1000
- a = [
- (1300, 2200),
- (0, 1300),
- (1300, 5700),
- (0, 0),
- (5000, 0),
- (1800, 3400)
- ]
- """
- """
- events - массив событий, каждый запрос (s, f) - это 2 события
- (s, +1) - увеличить количество задач в момент времени s
- (f, -1) - уменьшить количество задач в момент времени f
- """
- events = []
- for i in range(n):
- st, fn = a[i]
- events.append( (st, 1) )
- if fn > 0: # если задача окончилась до конца суток
- events.append( (fn, -1) )
- events.sort() # сортируем события, чтобы обрабатывать их по очереди
- # Посчитаем количество запросов, которые начались до k и еще не закончились
- cnt = 0
- i = 0
- while i < len(events):
- if events[i][0] > k:
- break
- cnt += events[i][1]
- i += 1
- # массив уникальных времен и количества одновременных запросов в эти времена
- b = [ [k, cnt]]
- while i < len(events):
- cnt += events[i][1]
- if events[i][0] == b[-1][0]:
- b[-1][1] = cnt
- else:
- b.append( [events[i][0], cnt] )
- i += 1
- # находим минимальное количество одновременных запросов
- mn = n
- for i in range(len(b)):
- if b[i][1] < mn:
- mn = b[i][1]
- # находим суммарное время
- s = 0
- for i in range(0, len(b)-1):
- if b[i][1] == mn:
- s += (b[i+1][0] - b[i][0])
- print(mn, s)
Advertisement
Add Comment
Please, Sign In to add comment