CCC-99 (1999) - 4 (Knight)

View as PDF

Submit solution

Points: 60 (partial)
Time limit: 1.0s
Memory limit: 64M

Author:
Problem type
Allowed languages
C, C++, Java, Pascal, Python
A Knightly Pursuit

Στο σκάκι, οι πεσσοί κινούνται σε μια σκακιέρα διαστάσεων 8 × 8 με τρόπο που ορίζεται από τον τύπο τους. Το αντικείμενο του παιχνιδιού είναι να αιχμαλωτίσουν τους αντίπαλους πεσσούς όταν κινούνται στα τετράγωνά τους και τελικά παγιδεύοντας τον αντίπαλο βασιλιά.

Στην δική μας έκδοση του παιχνιδιού, θα χρησιμοποιήσουμε έναν πίνακα μεταβλητού μεγέθους με μόνο 2 πεσσούς: Ένα λευκό πιόνι που κινείται ακατάπαυστα προς την επάνω σειρά της σκακιέρας ένα τετράγωνο κάθε φορά ανά κίνηση, και ένα μαύρο άλογο που μπορεί να μετακινηθεί από την τρέχουσα θέση του με οποιονδήποτε από τους έως και οκτώ τρόπους: δύο τετράγωνα πάνω ή κάτω και ένα τετράγωνο αριστερά ή δεξιά, ή ένα τετράγωνο πάνω ή κάτω και δύο τετράγωνα αριστερά ή δεξιά. Το άλογο πρέπει να παραμένει στο ταμπλό ανά πάσα στιγμή. Επομένως, οποιαδήποτε κίνηση που θα το απομάκρυνε από το ταμπλό δεν επιτρέπεται. Στο παρακάτω διάγραμμα, η θέση του αλόγου φέρει την ένδειξη K και οι πιθανές κινήσεις του επισημαίνονται με 1 έως 8.

. . . . . . .
. . 8 . 1 . .
. 7 . . . 2 .
. . . K . . .
. 6 . . . 3 .
. . 5 . 4 . .
. . . . . . .

Το πιόνι κινείται πρώτο, στη συνέχεια το άλογο και το πιόνι κινούνται εναλλάξ. Το άλογο προσπαθεί να προσγειωθεί είτε στο τετράγωνο που καταλαμβάνει το πιόνι ( νίκη / win ) είτε στο τετράγωνο ακριβώς πάνω από το πιόνι ( πατ / stalemate ). Εάν το πιόνι φτάσει στην επάνω σειρά του ταμπλό, το παιχνίδι τελειώνει αμέσως και το άλογο χάνει ( ήττα / loss ).

Γράψτε ένα πρόγραμμα για να προσδιορίσετε εάν το άλογο μπορεί να κερδίσει και, εάν μπορεί, τον ελάχιστο αριθμό κινήσεων που πρέπει να εκτελέσει για να το επιτύχει. Εάν το άλογο δεν μπορεί να κερδίσει, το πρόγραμμά σας θα πρέπει να καθορίσει εάν μπορεί να προκαλέσει πατ και, αν μπορεί, τον ελάχιστο αριθμό κινήσεων που πρέπει να εκτελέσει για να το επιτύχει. Τέλος, εαν το άλογο δεν μπορεί να κερδίσει ή να προκαλέσει πατ, το πρόγραμμά σας θα πρέπει να υπολογίσει τον αριθμό των κινήσεων που εκτελεί το άλογο πριν κερδίσει το πιόνι.

Η πρώτη γραμμή εισόδου περιέχει έναν θετικό ακέραιο, n , τον αριθμό των παιχνιδιών προς ανάλυση. Για κάθε παιχνίδι υπάρχουν έξι γραμμές εισόδου:

  • r , ο αριθμός των σειρών στη σκακιέρα ( 3 \le r < 100 )
  • c , ο αριθμός των στηλών στη σκακιέρα ( 2 \le c < 100 )
  • pr , η σειρά της αρχικής θέσης του πιονιού (1 \le pr \le r)
  • pc , η στήλη της αρχικής θέσης του πιονιού ( 1 \le pc \le c )
  • kr , η σειρά της αρχικής θέσης του άλογο ( 1 \le kr \le r )
  • kc , η στήλη της αρχικής θέσης του άλογο ( 1 \le kc \le c )

Το πιόνι και το άλογο θα έχουν διαφορετικές θέσεις εκκίνησης. Η σειρά 1 βρίσκεται στο κάτω μέρος του πίνακα και η σειρά r βρίσκεται στην κορυφή του πίνακα. Η στήλη 1 βρίσκεται στα αριστερά και η στήλη c στα δεξιά.

Παράδειγμα

input

3
99
99
33
33
33
35
3
3
1
1
2
3
99
99
96
23
99
1

output

Win in 1 knight move(s).
Stalemate in 1 knight move(s).
Loss in 2 knight move(s).

Comments

There are no comments at the moment.