# 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)) |
English