fork(1) download
  1. def count(runners, runner, pages):
  2. if runners.get(runner) is None:
  3. return 0.0
  4. if len(runners.values()) == 1:
  5. return 1.0
  6.  
  7. runner_page = runners[runner]
  8. return find(pages, runner_page)/(len(runners.values()) - 1)
  9.  
  10. def find(pages, value):
  11. first = 0
  12. last = len(pages) - 1
  13.  
  14. pos = 0
  15. while first <= last:
  16. mid = (first + last) // 2
  17. pos = mid
  18. if pages[mid] == value:
  19. break
  20. else:
  21. if value < pages[mid]:
  22. last = mid - 1
  23. else:
  24. first = mid + 1
  25. if pos == len(pages) - 1 and len(pages) > 1:
  26. return len(pages)
  27. return pos
  28.  
  29. def insert(pages, old_value, new_value):
  30. if old_value is not None:
  31. index = find(pages, old_value)
  32. pages.pop(index)
  33. index = find(pages, new_value)
  34. pages.insert(index, new_value)
  35.  
  36. q = int(input())
  37.  
  38. runners = {}
  39. pages = []
  40. for i in range(q):
  41. query = input().split(' ')
  42. runner = int(query[1])
  43. if query[0] == 'RUN':
  44. page = int(query[2])
  45. if runners.get(runner) is None:
  46. insert(pages, None, page)
  47. runners[runner] = page
  48. else:
  49. insert(pages, runners[runner], page)
  50. runners[runner] = page
  51. if query[0] == 'CHEER':
  52. print("{:.6f}".format(count(runners, runner, pages)))
  53. print(runners, pages)
  54.  
Success #stdin #stdout 0.02s 9372KB
stdin
12
CHEER 5
RUN 1 10
CHEER 1
RUN 2 5
RUN 3 7
CHEER 2
CHEER 3
RUN 3 10
CHEER 3
RUN 3 11
CHEER 3
CHEER 1
stdout
0.000000
{} []
{1: 10} [10]
1.000000
{1: 10} [10]
{1: 10, 2: 5} [5, 10]
{1: 10, 2: 5, 3: 7} [5, 10, 7]
0.000000
{1: 10, 2: 5, 3: 7} [5, 10, 7]
0.000000
{1: 10, 2: 5, 3: 7} [5, 10, 7]
{1: 10, 2: 5, 3: 10} [10, 10, 7]
0.500000
{1: 10, 2: 5, 3: 10} [10, 10, 7]
{1: 10, 2: 5, 3: 11} [10, 7, 11]
1.500000
{1: 10, 2: 5, 3: 11} [10, 7, 11]
1.500000
{1: 10, 2: 5, 3: 11} [10, 7, 11]