• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie Wycinek błąd w kodzie

0 głosów
196 wizyt
pytanie zadane 30 sierpnia 2024 w Python przez Zavvys Nowicjusz (120 p.)

Link do treści zadania: https://szkopul.edu.pl/problemset/problem/pAy3KzzMQ8Gh-LFsyL0tZts6/site/?key=statement

Cześć, rozwiązuje zadanie Wycinek. Moim rozwiązaniem jest najpierw liczenie sum prefiksowych, potem zapisywanie kandydatów (liczb, które prefi[i]+s in prefi), a na końcu wybieram największa rożnice elementów prefi[i]+s - prefi[i]. Niestety nie mogę wyłapać 2 błedów:

Pierwszy błąd polega na tym, że zamiast wypisywać BRAK, wypisuje mi liczbe całkowitą. Drugi błąd jest taki, że wynik jest większy niż powinien być. Podejrzewam,  że chodzi o coś z sumami prefiksowymi.

Mój kod w pythonie:

n, s = map(int, input().split())
ciag = list(map(int, input().split()))
sum_pref = [0]
odp = 0
kandydaci = dict()
# liczenie sum prefiksowych
for i in range(n):
    sum_pref += [sum_pref[-1]+ciag[i]]

a = set(sum_pref) #Tworze seta, żeby było stałe wyszukiwanie sum_pref[i]+s w sumach pref.

# dodawanie kandydatów
for i in range(n):
    if sum_pref[i]+s in a:
        if sum_pref[i] not in kandydaci:
            kandydaci[sum_pref[i]] = i

# Szukanie najwiekszej róznicy sum_pref[i]-s - sum_pref[i]
odp = 0
for i in range(1, n+1):
    if sum_pref[i]-s in kandydaci:
        odp = max(odp, abs(i-kandydaci[sum_pref[i]-s]))

# Jeżeli odpowiedz jest rowna 0, to oznacza to, że nie ma żadnego takiego podciagu
if odp == 0:
    print('BRAK')
else:
    print(odp)

 

komentarz 30 sierpnia 2024 przez Zavvys Nowicjusz (120 p.)
Zapomniałem dodać, że nie mogę wyłapać tych błedów w kodzie i dokładnie nie wiem dlaczego tak jest. Prosze o szybką pomoc. Dzięki!
komentarz 30 sierpnia 2024 przez adrian17 Mentor (354,120 p.)
możesz jeszcze pokazać, dla jakiego wejścia powinieneś dostać 'brak', a nie dostajesz?
komentarz 30 sierpnia 2024 przez Zavvys Nowicjusz (120 p.)
niestety nie posiadam danych wejsciowych ponieważ testowałem to na szkopule.
komentarz 31 sierpnia 2024 przez jankustosz1 Nałogowiec (36,960 p.)

@Zavvys, Nie potrzebujesz tu sum prefiksowych. Możesz zastosować tzw. gąsienicę

Mocno przekombinowałeś.

komentarz 31 sierpnia 2024 przez Zavvys Nowicjusz (120 p.)
Tak wiem o tym. Problem jest taki że nie wiem jak ją zastosować w tym zadaniu.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 127 wizyt
pytanie zadane 24 października 2023 w C i C++ przez kamilek1234 Nowicjusz (120 p.)
+1 głos
1 odpowiedź 472 wizyt
0 głosów
1 odpowiedź 1,043 wizyt
pytanie zadane 12 lutego 2023 w C i C++ przez polandonion Dyskutant (7,630 p.)

93,427 zapytań

142,421 odpowiedzi

322,649 komentarzy

62,787 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...