import sys
def moore(seq_length, seq):
counter = 0
element = -1
for x in range(0, seq_length):
count_array[seq[x]] += 1
if counter == 0:
element = seq[x]
counter = 1
elif element == seq[x]:
counter += 1
else:
counter -=1
occurence = seq.count(element)
if occurence > seq_length / 2:
return True
else:
return False
n = int(input())
sequence = [int(i) for i in input().split(" ")]
count_array = [0] * 500000
if moore(n,sequence):
print(0)
sys.exit(0)
count_array.sort(reverse=True)
finished = False
number_of_split = 0
suffiecent_for = 0
while number_of_split<500000:
suffiecent_for += count_array[number_of_split] * 2 - 1
if suffiecent_for >= n:
print(number_of_split + 1)
sys.exit(0)
else:
number_of_split += 1
print(number_of_split)
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 | import sys def moore(seq_length, seq): counter = 0 element = -1 for x in range(0, seq_length): count_array[seq[x]] += 1 if counter == 0: element = seq[x] counter = 1 elif element == seq[x]: counter += 1 else: counter -=1 occurence = seq.count(element) if occurence > seq_length / 2: return True else: return False n = int(input()) sequence = [int(i) for i in input().split(" ")] count_array = [0] * 500000 if moore(n,sequence): print(0) sys.exit(0) count_array.sort(reverse=True) finished = False number_of_split = 0 suffiecent_for = 0 while number_of_split<500000: suffiecent_for += count_array[number_of_split] * 2 - 1 if suffiecent_for >= n: print(number_of_split + 1) sys.exit(0) else: number_of_split += 1 print(number_of_split) |
English