Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

AL_05_10 - Gra w wieże

Antek i Basia są rodzeństwem, a ich ulubioną zabawą były zawsze klocki. Dzieci są bardzo inteligentne i zwykłe układanie klocków już je nudzi. Postanowiły więc wykorzystać je w jakiś nietypowy, ciekawszy sposób i wymyśliły niedawno grę opartą na opisanych niżej zasadach.

Najpierw trzeba przygotować dużo (jednakowych, co do wymiarów) klocków w dwóch wybranych kolorach. Weźmy dla przykładu czerwone i zielone. Czerwonych klocków może być nieco więcej niż zielonych, ale nie odwrotnie. Należy jeszcze tylko ustawić z tych klocków dwie jednokolorowe wieże i już można przystąpić do gry.

Dzieci wykonują ruchy na zmianę, a zaczyna zawsze Basia. Każdy gracz w swojej kolejce musi wykonać jeden z trzech ruchów, polegających na zabraniu pewnej niezerowej liczby klocków z jednej lub obu wież.

Dozwolone rodzaje ruchów:

  1. Zabieramy tylko klocki z czerwonej wieży.
  2. Zabieramy klocki z obu wież, ale tyle samo z czerwonej co z zielonej.
  3. Zabieramy klocki z obu wież, ale z czerwonej dwa razy więcej niż z zielonej.

Dodatkowo należy przestrzegać warunku: 
Po żadnym ruchu czerwona wieża nie może stać się niższa od zielonej!

Wygrywa ten, kto zabiera ostatni klocek. 

Basia i Antek doszli już w tej grze do perfekcji (grają optymalnie), więc postanowili ją sobie nieco utrudnić. Budują teraz pewną liczbę par wież i zanim wykonają jeden z opisanych wyżej ruchów muszą najpierw zdecydować, której pary będzie on dotyczyć (dla jasności: pary są ustalone na całą grę i nie można do ruchu wybrać dwóch wież z różnych par). Grają więc teraz na wielu parach wież jednocześnie. Nadal jednak pierwszy ruch wykonuje zawsze Basia i wygrywa oczywiście ten, po czyim ruchu nie będzie już żadnego klocka w grze. 

Okazało się, że przy optymalnej grze każdego z dzieci (a taką trzeba założyć), to kto wygra, zależy tylko i wyłącznie od początkowego stanu wież. Można więc napisać program, który na podstawie liczby wież i ich wysokości, wyznaczy zwycięzcę. To Twoje zadanie.

 

Wejście

W pierwszej linii liczba przypadków testowych (czyli osobnych gier) t (0 < t ≤ 1000).
Każdy test rozpoczyna się linią, w której znajduje się jedna liczba całkowita n (0 < n ≤ 1000) oznaczająca ile par wież mamy w grze.
W każdej z kolejnych n linii, po dwie liczby całkowite c i z (0 < c, z ≤ 1018; 0cz < 45) oznaczające z ilu klocków składają się (odpowiednio czerwona i zielona) wieże w danej parze.

Wyjście

Dla każdego przypadku testowego, w osobnej linii imię dziecka, które wygra.

Przykład

Wejście:
5
1
2 1
1
3 1
2
4 3
4 3
3
5 2
4 4
7 6
4
8 5
3 2
8 3
11 7 Wyjście: Basia
Antek
Antek
Basia
Antek 

Dodane przez:Witold Długosz
Data dodania:2013-04-03
Limit czasu wykonania programu:1s-1.200s
Limit długości kodu źródłowego50000B
Limit pamięci:1536MB
Cluster: Cube (Intel G860)
Języki programowania:All except: ASM64 GOSU
Pochodzenie:ALGOLIGA

ukryj komentarze
2013-04-24 21:50:09 Witold D³ugosz
Zadanie w polskim spoju zostało wzbogacone o dodatkowe testy, których Twój program (tak jak podejrzewałem w czasie konkursu, jednak nie do końca poprawny) nie przechodzi.
Swoją drogą, namęczyłem się żeby takie testy znaleźć.
Bardzo ładnie wyznaczasz wartości w tablicy, ale dla wartości wykraczających poza nią, nie uwzględniasz tego, o czym pisałem w czasie Algoligi, a jednak ma to zasadnicze znaczenie.

Ostatnio edytowany: 2013-04-24 21:55:51
2013-04-09 09:30:06 Kamil Debowski
Chyba do "głównego" spoja wrzuciliście zadanie ze starymi testami którymiś.
2013-04-07 14:11:14 Kamil Debowski
linia nr 23 - cały czas to miałem i właśnie to uwzględnia niecykliczne przedziały
2013-04-07 13:27:12 Witold D³ugosz
No wprawdzie nie widzę w Twoim kodzie uwzględnienia tych niecyklicznych przedziałów, ale może dzięki takiemu zwiększeniu tablicy przestaje to mieć znaczenie. Niestety wydaje mi się, że jednak powinno mieć. Niestety nie mam teraz już czasu, żeby to przemyśleć. Na razie gratuluję.
2013-04-07 13:19:16 Kamil Debowski
udało się - oby tym razem było poprawnie :D
2013-04-07 12:37:09 Witold D³ugosz
Kamilu. Jeśli uwzględnisz te przedziały niecykliczne i odpowiednio zwiększysz tablicę - zaliczysz zadanie (co mnie bardzo ucieszy). I może będziesz tu szybszy niż Damian ;)


Ostatnio edytowany: 2013-04-07 12:43:04
2013-04-07 12:31:53 Witold D³ugosz
"c,z<=10^18 a przechodzi mi program z intami"
Wszystko co powinno się robić na long long można zrobić na int, tylko wynik czasami będzie inny. Przy operacji, którą wykonuje się w tym algorytmie (rozumiesz, że nie mogę napisać jakiej) zdarzać się to będzie bardzo rzadko. No i właśnie we wszystkich testach, które wcześniej przygotowałem, nie uwzględniłem takiej sytuacji. Mea culpa.
2013-04-07 12:28:28 Kamil Debowski
To chyba dosyć oczywiste, że tylko poprawne powinny być zaliczane ;)
2013-04-07 12:27:16 Witold D³ugosz
Przykro mi Kamilu, ale musiałem zrobić rejudge. Mam nadzieję, że obu nam zależy, aby zadanie można było zaliczyć, tylko poprawnym algorytmem. Sam zauważyłeś, że zmiana typu z long long na int nie może powodować zmiany WA na AC, więc coś jest nie tak.
Życzę Ci udanej poprawy programu.

Ostatnio edytowany: 2013-04-07 12:34:17
2013-04-07 12:25:22 Kamil Debowski
Jesteś pewny, że to zły algorytm? Bo o tym pomyślałem i dlatego przy zbijaniu dużej liczby do mniejszej ta nowa to co najmniej (i co najwyżej) kilka tysięcy. Nie sprawdzałem, gdzie są te miejsca rozpoczynające cykliczność, ale na większe liczby niż obecne nie pozwala złożoność.
No i co z tym typem zmiennych? c,z<=10^18 a przechodzi mi program z intami
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.