Najdłuższy fragment o równych sumach
Treść zadania
Otrzymujesz dwie listy binarne A i B (zera i jedynki) o tej samej długości n. Znajdź największą długość fragmentu (ciągłego zakresu indeksów od i do j), dla którego suma elementów A w tym zakresie jest równa sumie elementów B w tym samym zakresie, czyli $A_i + A_{i+1} + \ldots + A_j = B_i + B_{i+1} + \ldots + B_j$.
Jeśli taki fragment nie istnieje — wypisz 0.
Dane wejściowe
- 1. linia:
n— długość list - 2. linia:
nliczb0/1— listaA - 3. linia:
nliczb0/1— listaB
Dane wyjściowe
Jedna liczba całkowita — największa długość fragmentu albo 0.
Ograniczenia
1 ≤ n ≤ 1000
Uwagi
- Suma
AiBna fragmenciei..jjest równa wtedy, gdy różnica sum prefiksowych $\sum A - \sum B$ jest taka sama tuż przed indeksemii na indeksiej. Zapamiętuj w słowniku, gdzie każda różnica pojawiła się po raz pierwszy — da to rozwiązanie w czasie $O(n)$.
Przykład
6 0 0 1 1 1 1 0 1 1 0 1 0
5
Dla indeksów 0–4 obie sumy są równe 3, więc istnieje fragment długości 5. Dłuższego nie ma: dla całych list sumy wynoszą 4 i 3.
Potrzebujesz teorii?
Zasady obowiązujące w rozdziale 24
Trudniejsze zadania na listach: przekształcenia w miejscu, sumy prefiksowe, kopiec i programowanie dynamiczne. Liczy się nie tylko poprawny wynik, ale też dobry algorytm — w testach są także długie listy, na których rozwiązanie „sprawdzające wszystkie możliwości” nie zdąży się wykonać.
Konwencje wspólne:
- Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
- Program nie wypisuje komunikatów typu „Podaj liczbę:”. Tekst podany w
input("…")jest ignorowany przez sprawdzarkę. - Lista liczb jest podawana w dwóch liniach: w pierwszej jest liczba elementów
n, w drugiejnliczb całkowitych oddzielonych spacjami (o ile zadanie nie mówi inaczej). - Listę wynikową wypisuj w jednej linii, a jej elementy oddzielaj pojedynczą spacją (o ile zadanie nie mówi inaczej).
- Indeksy liczymy od
0.
Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.
Przywrócono Twój zapisany kod.
Python uruchomi się w przeglądarce przy pierwszym teście.
Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.
Testy
Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.
Test 1
Nie uruchomiono1 1 1
1
Test 2
Nie uruchomiono1 0 1
0
Test 3
Nie uruchomiono4 1 0 1 0 0 1 0 1
4
Test 4
Nie uruchomiono3 1 1 1 0 0 0
0
Test 5
Nie uruchomiono5 0 0 0 0 0 0 0 0 0 0
5
Test 6
Nie uruchomiono7 1 1 0 0 1 0 1 0 1 1 1 1 0 0
7
Test 7
Nie uruchomiono4 1 1 1 0 0 0 1 0
2
Test 8
Nie uruchomiono450 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 1 0 0 1 1 1 0 0 1 0 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1 0 1 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 1 1 0 1 1 1 1 1 1 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1 1 0 0 0 0 0 1 0 0 0 1 1 1 1 0 1 0 0 1 1 0 0 0 1 0 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 0 0 0 1 1 0 0 1 1 1 1 0 0 1 0 1 1 0 0 1 1 0 0 0 1 0 0 1 1 0 1 1 1 0 0 0 0 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0 1 1 1 0 0 0 1 1 0 1 0 1 0 0 0 0 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 1 0 0 0 1 1 1 0 0 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 1 0 0 0 0 1 1 1 0 0 1 0 0 0 0 1 0 1 0 1 0 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 0 1 1 0 1 1 0 0 1 1 0 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 0 1 1 0 1 0 1 0 1 1 1 0 0 0 1 0 0 1 0 0 1 0 0 0 1 1 1 0 1 1 1 0 1 0 0 1 1 1 0 1 1 1 1 0 0 1 1 0 1 0 1 0 0 0 0 1 0 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 1 0 0 1 0 0 0 0 1 1 0 0 0 1 1 1 1 0 0 0 0 1 1 0 0 0 0 0 1 0 1 1 1 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 1 0 0 1 1 1 0 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 1 0 0 1 1 1 0 1 0 0 0 0 0 0 1 1 0 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 0 0 0 1 1 1 0 1 1 0 0 1 1 0 1 0 0 1 1 0 1 1 1 0 1 1 0 0 0 1 0 0 0 1 1 1 1 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 1 0 0 1 1 1 1 0 0 1 1 0 1 0 1 1 0 0 1 1 1 1 1 1 0 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 1 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 0 0 1 1 1 0 0 0 0 0 1 0 1 1 0 0 0 1 0 1 1 0 0 0 0 0 1 1 1 0 1 0 0 1 0 1 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 1 1 1 0 1 0 1 0 0 1 0 1 1 1 1 0 1 1 0 1 0 0 1 1 1 0 1 1 1 1 0 1 1 1 1 0 0 1 0 1 1 0 1 0 0 0 0 0 1 1 1 1 0 0 1 0 0 1 1 0 1 1 0 1 0 0 1 0 1 0 0 0 1 0 1 0 0 1 0 0 0 1 1 0 0 0 1 1 0 0 1 1 1 0 1 1 0 0 1 0 1 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 0 1 1 0 1 1 1 0 1 1 0 1 1 1 0 0 0 0 0 1 0 0 1 0 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 1 1
280