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