Przyspieszenie algorytmu
Limit pamięci: 64 MB
Bajtazar musi za karę obliczyć pewną paskudną i tajemniczą funkcję logiczną
, która dla dwóch ciągów liczb naturalnych
,\
jest zdefiniowana w następujący sposób:
boolean ![](images/OI16/prz-tex.4.png)
if
then return
else if
then return
else return ![](images/OI16/prz-tex.9.png)
.
W powyższym zapisie:
-
oznacza zbiór złożony ze wszystkich liczb ciągu
(ignorujemy powtórzenia i kolejność liczb),
-
jest najdłuższym prefiksem (początkowym fragmentem) ciągu
,
dla którego
,
-
jest najdłuższym sufiksem (końcowym fragmentem) ciągu
,
dla którego
,
-
oznacza koniunkcję logiczną,
- prawdę,
- fałsz,
a
- liczność zbioru
.
Na przykład dla ciągu
![](images/OI16/prz-tex.23.png)
mamy:
![](images/OI16/prz-tex.24.png)
Dla bardzo dużych danych program obliczający funkcję bezpośrednio z definicji jest
zdecydowanie zbyt wolny.
Twoim zadaniem jest jak największe przyspieszenie obliczania tej funkcji.
Napisz program, który
wczyta ze standardowego wejścia kilka par ciągów
i
wypisze na standardowe wyjście wartości
dla każdej pary
wczytanych ciągów.
Wejście
Pierwszy wiersz wejścia zawiera jedną
liczbę całkowitą
(
), oznaczającą liczbę par ciągów do przeanalizowania.
Kolejne
wierszy zawiera opisy przypadków testowych.
Pierwszy wiersz każdego opisu zawiera dwie liczby całkowite
oraz
(
), oddzielone pojedynczym odstępem i oznaczające
długości pierwszego i drugiego ciągu.
Drugi wiersz zawiera
liczb całkowitych
(
),
pooddzielanych pojedynczymi odstępami i opisujących ciąg
.
Trzeci wiersz zawiera
liczb całkowitych
(
),
pooddzielanych pojedynczymi odstępami i opisujących ciąg
.
Wyjście
Wyjście powinno się składać z
wierszy;
-ty wiersz (dla
)
powinien zawierać jedną liczbę całkowitą - 0 lub 1 -
oznaczającą wartość wyrażenia
dla
-tego przypadku testowego.
Przykład
Dla danych wejściowych:
2
4 5
3 1 2 1
1 3 1 2 1
7 7
1 1 2 1 2 1 3
1 1 2 1 3 1 3
poprawną odpowiedzią jest:
0
1
Autorzy zadania: Jakub Radoszewski, Wojciech Rytter.