Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- def max_elem_of(arr):
- max_elem = arr[0]
- max_elem_pos = 0
- length = len(arr)
- for idx in range(length):
- elem = arr[idx]
- if max_elem < elem:
- max_elem = elem
- max_elem_pos = idx
- return max_elem, max_elem_pos
- def reduce(arr):
- out = []
- for elem in arr:
- if elem > 1:
- out.append(elem - 1)
- return out
- def solve(seq):
- steps = 0
- while len(seq) > 0:
- steps += 1
- max_elem, max_elem_pos = max_elem_of(seq)
- max_elem_third = math.ceil(max_elem / 3.0)
- max_elem_third_double = max_elem_third * 2
- max_elem_half = math.ceil(max_elem / 2.0)
- half_penalty = 0
- third_penalty = 0
- half_win = 0
- third_win = 0
- if max_elem > 3:
- for elem in seq:
- if elem > max_elem_third:
- if elem <= max_elem_third_double:
- third_penalty += 1
- else:
- third_penalty += 2
- if elem > max_elem_half:
- half_penalty += 1
- half_win = max_elem - max_elem_half - half_penalty
- third_win = max_elem - max_elem_third - third_penalty
- if half_win >= third_win and half_win > 0:
- seq[max_elem_pos] = max_elem_half
- seq.append(max_elem - max_elem_half)
- continue
- if third_win >= half_win and third_win > 0:
- seq[max_elem_pos] = max_elem_third
- seq.append(max_elem - max_elem_third)
- continue
- seq = reduce(seq)
- continue
- return steps
- if __name__ == "__main__":
- f = open('jam_6224486_2.in', 'r')
- fout = open('jam_6224486_2.out', 'w')
- example_count = int(f.readline())
- for i in range(example_count):
- nonempty_count = int(f.readline())
- sequence_raw = f.readline().split(" ")
- sequence = []
- for elem in sequence_raw:
- sequence.append(int(elem))
- result_message = "Case #" + str(i + 1) + ": " + str(solve(sequence))
- print(result_message)
- fout.write(result_message + '\n')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement