Zgłaszanie | Wszystkie zgłoszenia | Najlepsze | Lista |
AL_19_10 - Gra w czterech wymiarach |
Antek i Basia wymyślili nową grę. Toczy się ona na planszy w kształcie tesseraktu o ustalonej długości krawędzi N, który umieszczony jest w czterowymiarowym układzie współrzędnych kartezjańskich tak, że jego krawędzie są równoległe do osi, jeden z wierzchołków ma współrzędne (0,0,0,0), a przeciwległy (N,N,N,N). Każdy z graczy używa pionków pewnego koloru (weźmy dla przykładu czarne i białe), a sama gra polega na naprzemiennym stawianiu przez graczy swoich pionków w wolnych punktach kratowych należących do hipersześcianu. Punkty trzeba zajmować bardzo rozważnie, ponieważ w trakcie gry może nastąpić bicie. Jeżeli na odcinku łączącym stawiany w danym ruchu pionek z innym pionkiem tego gracza znajdują się tylko pionki przeciwnika lub niezajęte punkty, to te pionki przeciwnika są zbijane.
Antek i Basia radzą sobie już w tej grze całkiem dobrze, ale przydałby im się program, który na podstawie aktualnej sytuacji na planszy obliczy liczbę zbijanych pionków przeciwnika dla kilku rozważanych ruchów. Napisanie takiego programu to Twoje zadanie.
Wejście
W pierwszej linii długość krawędzi hipersześcianu N (2 ≤ N ≤ 30).
W drugiej linii liczba białych pionków znajdujących się na planszy b (0 ≤ b < min((N+1)4, 30000).
W kolejnych b liniach po cztery liczby całkowite xi (dla i = 1..4, 0 ≤ xi ≤ N) oznaczające współrzędne punktów zajętych przez białe pionki.
W następnej linii liczba czarnych pionków znajdujących się na planszy c (0 ≤ c+b < min((N+1)4, 30000).
W kolejnych c liniach po cztery liczby całkowite xi (dla i = 1..4, 0 ≤ xi ≤ N) oznaczające współrzędne punktów zajętych przez czarne pionki.
Następnie liczba rozważanych ruchów r (1 ≤ r ≤ 100).
W każdej z kolejnych r linii najpierw litera 'B' lub 'C' oznaczająca, który gracz miałby wykonać następny ruch. Potem cztery liczby całkowite ai (dla i = 1..4, 0 ≤ ai ≤ N) oznaczające współrzędne wolnego punktu, którego zajęcie dany gracz rozważa.
Wyjście
Dla każdego rozważanego ruchu w osobnej linii jedna liczba całkowita oznaczające ile pionków przeciwnika zostałoby zbitych.
Przykład
Wejście:
3 8 1 0 1 0 2 0 2 0 0 2 2 2 1 1 1 1 1 3 1 0 3 1 3 1 3 1 1 3 3 3 3 3 7 0 3 3 3 3 0 3 0 1 2 1 2 1 3 1 1 2 2 2 2 2 2 1 3
1 3 1 2 2 B 1 3 1 3 C 0 0 0 0 Wyjście: 5
4
Wyjaśnienie do przykladu:
Gdyby grający białymi postawił swój pionek w punkcie (1,3,1,3), to zostałyby zbite czarne pionki z punktów: (1,3,1,1), (1,3,1,2), (1,2,1,2), (2,2,1,3) i (2,2,2,2).
Gdyby grający czarnymi postawił swój pionek w punkcie (0,0,0,0), to zostałyby zbite białe pionki z punktów: (1,0,1,0), (2,0,2,0), (1,1,1,1) oraz (0,2,2,2).
Dodane przez: | Witold Długosz |
Data dodania: | 2014-11-27 |
Limit czasu wykonania programu: | 1s-3s |
Limit długości kodu źródłowego | 50000B |
Limit pamięci: | 1536MB |
Cluster: | Cube (Intel G860) |
Języki programowania: | All except: ASM64 GOSU |
Pochodzenie: | ALGOLIGA 19 |