import sys def podzial_piratow(n, m, chciwosc): wyniki = [-1] * n # Inicjalizacja wyników (-1 oznacza wyrzucenie za burtę) aktywni_piraci = list(range(n)) # Lista aktywnych piratów (ci, którzy jeszcze nie zostali wyrzuceni) while aktywni_piraci: i = aktywni_piraci[0] # Pierwszy pirat w hierarchii dostepne_monety = m propozycja = [0] * n propozycja[i] = dostepne_monety # Domyślnie pirat chce wszystko dla siebie # Sprawdzenie, czy może przekonać innych piratów glosy_za = 1 # Sam na siebie głosuje pozostali_piraci = aktywni_piraci[1:] for j in reversed(pozostali_piraci): potrzebne_monety = chciwosc[j] if dostepne_monety >= potrzebne_monety: propozycja[j] = potrzebne_monety dostepne_monety -= potrzebne_monety glosy_za += 1 if glosy_za >= (len(aktywni_piraci) + 1) // 2: break if glosy_za >= (len(aktywni_piraci) + 1) // 2: for j in aktywni_piraci: wyniki[j] = propozycja[j] break else: aktywni_piraci.pop(0) # Pirat zostaje wyrzucony za burtę return wyniki if __name__ == "__main__": # Wczytywanie wejścia n, m = map(int, sys.stdin.readline().split()) chciwosc = list(map(int, sys.stdin.readline().split())) # Obliczanie i wypisywanie wyników print(" ".join(map(str, podzial_piratow(n, m, chciwosc))))
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 | import sys def podzial_piratow(n, m, chciwosc): wyniki = [-1] * n # Inicjalizacja wyników (-1 oznacza wyrzucenie za burtę) aktywni_piraci = list(range(n)) # Lista aktywnych piratów (ci, którzy jeszcze nie zostali wyrzuceni) while aktywni_piraci: i = aktywni_piraci[0] # Pierwszy pirat w hierarchii dostepne_monety = m propozycja = [0] * n propozycja[i] = dostepne_monety # Domyślnie pirat chce wszystko dla siebie # Sprawdzenie, czy może przekonać innych piratów glosy_za = 1 # Sam na siebie głosuje pozostali_piraci = aktywni_piraci[1:] for j in reversed(pozostali_piraci): potrzebne_monety = chciwosc[j] if dostepne_monety >= potrzebne_monety: propozycja[j] = potrzebne_monety dostepne_monety -= potrzebne_monety glosy_za += 1 if glosy_za >= (len(aktywni_piraci) + 1) // 2: break if glosy_za >= (len(aktywni_piraci) + 1) // 2: for j in aktywni_piraci: wyniki[j] = propozycja[j] break else: aktywni_piraci.pop(0) # Pirat zostaje wyrzucony za burtę return wyniki if __name__ == "__main__": # Wczytywanie wejścia n, m = map(int, sys.stdin.readline().split()) chciwosc = list(map(int, sys.stdin.readline().split())) # Obliczanie i wypisywanie wyników print(" ".join(map(str, podzial_piratow(n, m, chciwosc)))) |