# 1 2 3 1 2 # # 11 22 3 # # start = 5 # # 1 1 1 3 4 # # # 5 # 1 1 1 1 1 -> 5 # # 2 1 1 1 -> 4 # # 2 2 1 -> 2 # # 3 1 1 # # 1 1 1 7 8 # # firstTry = 3 at least # secondTry = 2 # # # length = 10 # firstTry = 6 # # 2 2 2 2 2 1 4 5 6 7 8 - 2 # # secondTry = 5 # thordTry = 4 # # 1 1 1 1 1 1 # # # 1 1 1 5 5 # 1 1 1 3 3 # # # 2 2 2 2 1 # # 2 2 1 # # a b a b # # # maxHeap # # 5 5 5 1 # # 1 # # 9 9 # 1 # 2 2 1 def calculate(items): if len(items) == 0: return 0 if len(items) == 1: return 1 if items[0] == 1: return len(items) r = len(items) - 1 l = 0 result = 0 while l <= r: diff = items[l] - items[r] if diff == 0: result += 1 l += 1 items[r] = 1 else: substructFromRight = items[l] - 1 while r > l and substructFromRight > 0: substructFromRight = substructFromRight - items[r] r -= 1 items[r] = items[r] + substructFromRight l += 1 result += 1 return result # example diff == 2 # 5 1 1 1 1 from collections import defaultdict count = int(input()) items = list(map(int, input().split())) dict = defaultdict(int) for i in range(len(items)): dict[items[i]] += 1 allItems = list(dict.values()) allItems.sort(reverse=True) print(calculate(allItems))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | # 1 2 3 1 2 # # 11 22 3 # # start = 5 # # 1 1 1 3 4 # # # 5 # 1 1 1 1 1 -> 5 # # 2 1 1 1 -> 4 # # 2 2 1 -> 2 # # 3 1 1 # # 1 1 1 7 8 # # firstTry = 3 at least # secondTry = 2 # # # length = 10 # firstTry = 6 # # 2 2 2 2 2 1 4 5 6 7 8 - 2 # # secondTry = 5 # thordTry = 4 # # 1 1 1 1 1 1 # # # 1 1 1 5 5 # 1 1 1 3 3 # # # 2 2 2 2 1 # # 2 2 1 # # a b a b # # # maxHeap # # 5 5 5 1 # # 1 # # 9 9 # 1 # 2 2 1 def calculate(items): if len(items) == 0: return 0 if len(items) == 1: return 1 if items[0] == 1: return len(items) r = len(items) - 1 l = 0 result = 0 while l <= r: diff = items[l] - items[r] if diff == 0: result += 1 l += 1 items[r] = 1 else: substructFromRight = items[l] - 1 while r > l and substructFromRight > 0: substructFromRight = substructFromRight - items[r] r -= 1 items[r] = items[r] + substructFromRight l += 1 result += 1 return result # example diff == 2 # 5 1 1 1 1 from collections import defaultdict count = int(input()) items = list(map(int, input().split())) dict = defaultdict(int) for i in range(len(items)): dict[items[i]] += 1 allItems = list(dict.values()) allItems.sort(reverse=True) print(calculate(allItems)) |