import sys
DEBUG = False
n = int(input())
aa = [0 for _ in range(n + 1)]
a = [int(i) for i in input().split(' ') if i != '']
for b in a:
aa[b] += 1
if max(aa) > n // 2:
print(1)
sys.exit()
elif max(aa) == 1:
print(n)
sys.exit()
aa = [x for x in aa if x != 0]
aa.sort(reverse=True)
cc = list(aa)
k = 0
aalen = len(aa)
while k < aalen - 1:
DEBUG and print("k: ", k)
DEBUG and print(" ost: ", cc[aalen - 1])
isDel = False
for z in range(cc[aalen - 1], 0, -1):
DEBUG and print(" z: ", z)
if aa[k] > (cc[k] + z) // 2:
cc[k] += z
if z == cc[aalen - 1]:
DEBUG and print(' del')
del cc[aalen - 1]
del aa[aalen - 1]
aalen -= 1
isDel = True
break
else:
cc[aalen - 1] -= z
aa[aalen - 1] -= z
DEBUG and print(" done z :", z)
break
if not isDel:
k += 1
print(len(aa))
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 | import sys DEBUG = False n = int(input()) aa = [0 for _ in range(n + 1)] a = [int(i) for i in input().split(' ') if i != ''] for b in a: aa[b] += 1 if max(aa) > n // 2: print(1) sys.exit() elif max(aa) == 1: print(n) sys.exit() aa = [x for x in aa if x != 0] aa.sort(reverse=True) cc = list(aa) k = 0 aalen = len(aa) while k < aalen - 1: DEBUG and print("k: ", k) DEBUG and print(" ost: ", cc[aalen - 1]) isDel = False for z in range(cc[aalen - 1], 0, -1): DEBUG and print(" z: ", z) if aa[k] > (cc[k] + z) // 2: cc[k] += z if z == cc[aalen - 1]: DEBUG and print(' del') del cc[aalen - 1] del aa[aalen - 1] aalen -= 1 isDel = True break else: cc[aalen - 1] -= z aa[aalen - 1] -= z DEBUG and print(" done z :", z) break if not isDel: k += 1 print(len(aa)) |
English