Advertisement
Guest User

Untitled

a guest
May 22nd, 2015
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. import math
  2.  
  3.  
  4. def max_elem_of(arr):
  5. max_elem = arr[0]
  6. max_elem_pos = 0
  7. length = len(arr)
  8. for idx in range(length):
  9. elem = arr[idx]
  10. if max_elem < elem:
  11. max_elem = elem
  12. max_elem_pos = idx
  13.  
  14. return max_elem, max_elem_pos
  15.  
  16.  
  17. def reduce(arr):
  18. out = []
  19. for elem in arr:
  20. if elem > 1:
  21. out.append(elem - 1)
  22. return out
  23.  
  24.  
  25. def solve(seq):
  26. steps = 0
  27. while len(seq) > 0:
  28. steps += 1
  29.  
  30. max_elem, max_elem_pos = max_elem_of(seq)
  31. max_elem_third = math.ceil(max_elem / 3.0)
  32. max_elem_third_double = max_elem_third * 2
  33. max_elem_half = math.ceil(max_elem / 2.0)
  34. half_penalty = 0
  35. third_penalty = 0
  36. half_win = 0
  37. third_win = 0
  38.  
  39. if max_elem > 3:
  40. for elem in seq:
  41. if elem > max_elem_third:
  42. if elem <= max_elem_third_double:
  43. third_penalty += 1
  44. else:
  45. third_penalty += 2
  46.  
  47. if elem > max_elem_half:
  48. half_penalty += 1
  49.  
  50. half_win = max_elem - max_elem_half - half_penalty
  51. third_win = max_elem - max_elem_third - third_penalty
  52.  
  53. if half_win >= third_win and half_win > 0:
  54. seq[max_elem_pos] = max_elem_half
  55. seq.append(max_elem - max_elem_half)
  56. continue
  57.  
  58. if third_win >= half_win and third_win > 0:
  59. seq[max_elem_pos] = max_elem_third
  60. seq.append(max_elem - max_elem_third)
  61. continue
  62.  
  63. seq = reduce(seq)
  64. continue
  65.  
  66. return steps
  67.  
  68.  
  69. if __name__ == "__main__":
  70. f = open('jam_6224486_2.in', 'r')
  71. fout = open('jam_6224486_2.out', 'w')
  72. example_count = int(f.readline())
  73. for i in range(example_count):
  74. nonempty_count = int(f.readline())
  75. sequence_raw = f.readline().split(" ")
  76. sequence = []
  77. for elem in sequence_raw:
  78. sequence.append(int(elem))
  79.  
  80. result_message = "Case #" + str(i + 1) + ": " + str(solve(sequence))
  81. print(result_message)
  82. fout.write(result_message + '\n')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement