def max_stamps_to_give(n, stamps):
from collections import Counter
# Zliczamy wystąpienia każdego numeru miasta
city_counts = Counter(stamps)
# Tworzymy listę par (liczba_znaczków, liczba_miast)
counts = sorted(city_counts.values(), reverse=True)
# Obliczamy maksymalną liczbę znaczków do rozdania dla k chętnych
max_stamps = [0] * n
for k in range(1, n + 1):
total_stamps = 0
for count in counts:
total_stamps += min(count, k)
max_stamps[k-1] = total_stamps
# Znajdujemy punkty, w których wartość się zmienia i wypełniamy luki
results = []
last_value = max_stamps[0]
for i in range(n):
if max_stamps[i] < last_value:
last_value = max_stamps[i]
results.append(last_value)
if last_value == 0: # Jeśli osiągniemy 0, nie ma sensu kontynuować
results.extend([0] * (n - i - 1))
break
return results
# Przykładowe dane wejściowe
n = 9
stamps = [1, 1, 777, 42, 777, 1, 42, 1, 777]
# Wywołanie funkcji
results = max_stamps_to_give(n, stamps)
# Wyświetlenie wyniku
print(" ".join(map(str, results)))
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 | def max_stamps_to_give(n, stamps): from collections import Counter # Zliczamy wystąpienia każdego numeru miasta city_counts = Counter(stamps) # Tworzymy listę par (liczba_znaczków, liczba_miast) counts = sorted(city_counts.values(), reverse=True) # Obliczamy maksymalną liczbę znaczków do rozdania dla k chętnych max_stamps = [0] * n for k in range(1, n + 1): total_stamps = 0 for count in counts: total_stamps += min(count, k) max_stamps[k-1] = total_stamps # Znajdujemy punkty, w których wartość się zmienia i wypełniamy luki results = [] last_value = max_stamps[0] for i in range(n): if max_stamps[i] < last_value: last_value = max_stamps[i] results.append(last_value) if last_value == 0: # Jeśli osiągniemy 0, nie ma sensu kontynuować results.extend([0] * (n - i - 1)) break return results # Przykładowe dane wejściowe n = 9 stamps = [1, 1, 777, 42, 777, 1, 42, 1, 777] # Wywołanie funkcji results = max_stamps_to_give(n, stamps) # Wyświetlenie wyniku print(" ".join(map(str, results))) |
English