| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 20 초 (추가 시간 없음) | 1024 MB | 57 | 10 | 5 | 10.638% |
Wielki informatyk Bajtazar od ponad 15 lat konstruuje niezwykły komputer, w którym liczby są reprezentowane w systemie Fibonacciego, czyli są zapisywane jako suma różnych, niekolejnych liczb Fibonacciego. Formalnie, jeśli zdefiniujemy liczby Fibonacciego, zaczynając od 1 i 2:
F1 = 1, F2 = 2, Fi = Fi−1 + Fi−2 dla i ≥ 3,
to każda dodatnia liczba całkowita x przedstawia się jednoznacznie jako ciąg bitów (b1, b2, . . . , bn) dla pewnego n ≥ 1, spełniający następujące warunki:
Na przykład 2 = (0, 1), 4 = (1, 0, 1), 5 = (0, 0, 0, 1), zaś 20 = (0, 1, 0, 1, 0, 1) bo 20 = F2 + F4 + F6 = 2 + 5 + 13.
Dawno temu Bajtazar poprosił uczestników Olimpiady Informatycznej o pomoc w implementacji dodawania liczb w systemie Fibonacciego. Historia ta działa się przy okazji zadania Sumy Fibonacciego z drugiego etapu XII OI i została opisana w „niebieskiej książeczce” Olimpiady.
Tym razem sprawa jest trudniejsza, a Bajtazar głowi się nad nią już dobrych parę lat. Postanowił więc poprosić o radę uczestników Potyczek Algorytmicznych. Pomóżcie mu zaimplementować mnożenie!
W pierwszym wierszu wejścia znajduje się liczba zestawów testowych t (1 ≤ t ≤ 1000). W kolejnych 2t wierszach następuje opis zestawów.
Każdy zestaw składa się z dwóch wierszy. W pierwszym z nich dana jest reprezentacja dodatniej liczby całkowitej x w systemie Fibonacciego – najpierw liczba n oznaczająca jej długość, a następnie n bitów b1, b2, . . . , bn. W drugim wierszu dana jest w takim samym formacie reprezentacja dodatniej liczby całkowitej y.
Suma długości wszystkich reprezentacji z wejścia nie przekracza 106.
Dla każdego zestawu testowego z wejścia wypisz iloczyn x·y zapisany w systemie Fibonacciego w analogicznym formacie jak na wejściu – najpierw długość n′ , potem n′ bitów szukanej liczby. Poszczególne liczby w wierszach powinny być pooddzielane pojedynczymi odstępami.
Reprezentacje z wejścia i z wyjścia muszą spełniać warunki z zadania, więc w szczególności ciąg bitów musi kończyć się jedynką i nie może zawierać sąsiadujących jedynek.
2 3 1 0 1 4 0 0 0 1 2 0 1 1 1
6 0 1 0 1 0 1 2 0 1
Wyjaśnienie przykładu: W pierwszym zestawie testowym musimy pomnożyć liczby reprezentowane przez ciągi (1, 0, 1) i (0, 0, 0, 1). Po rozpisaniu dostajemy
(1 · F1 + 0 · F2 + 1 · F3) · (0 · F1 + 0 · F2 + 0 · F3 + 1 · F4) = (1 + 3) · (5) = 20 = F2 + F4 + F6,
wynikiem jest więc ciąg (0, 1, 0, 1, 0, 1) o długości 6.
Contest > Algorithmic Engagements > PA 2019 3-1번