Πρόκληση Φυλακισμένων
Σε μια φυλακή, υπάρχουν φυλακισμένοι.
Μια μέρα, ο φύλακας τους προσφέρει την ευκαιρία να διεκδικήσουν την ελευθερία τους.
Τοποθετεί δυο τσάντες με χρήματα σε ένα δωμάτιο, την τσάντα A και την τσάντα B.
Κάθε τσάντα περιέχει από
έως
κέρματα, συμπεριλαμβανομένων.
Το πλήθος των κερμάτων στην τσάντα Α είναι διαφορετικό από το πλήθος των κερμάτων στην τσάντα B.
Ο φύλακας παρουσιάζει στους φυλακισμένους μια πρόκληση.
Στόχος των φυλακισμένων είναι να εντοπίσουν την τσάντα με τα λιγότερα κέρματα.
Το δωμάτιο, εκτός από τις τσάντες με τα χρήματα, έχει και έναν ασπροπίνακα.
Οποιαδήποτε στιγμή, ένας μόνο αριθμός πρέπει να γράφεται στον ασπροπίνακα.
Αρχικά, ο αριθμός στον ασπροπίνακα είναι .
Στη συνέχεια, ο φύλακας ζητά από τους φυλακισμένους να μπουν στο δωμάτιο ο ένας μετά τον άλλον. Ο φυλακισμένος που εισέρχεται στο δωμάτιο δεν γνωρίζει ποιοι ή πόσοι άλλοι φυλακισμένοι μπήκαν στο δωμάτιο πριν από αυτόν. Κάθε φορά που ένας φυλακισμένος εισέρχεται στο δωμάτιο, διαβάζει τον τρέχοντα αριθμό που είναι γραμμένος στον ασπροπίνακα. Αφού διαβάσει τον αριθμό, πρέπει να επιλέξει είτε την τσάντα A είτε την τσάντα Β. Ο φυλακισμένος, έπειτα, ελέγχει την τσάντα που επέλεξε, κι έτσι μαθαίνει το πλήθος των κερμάτων που αυτή περιέχει. Στη συνέχεια ο φυλακισμένος πρέπει να εκτελέσει οποιαδήποτε από τις δύο ακόλουθες ενέργειες.
- Να αντικαταστήσει τον αριθμό στον ασπροπίνακα με έναν μη-αρνητικό ακέραιο κι έπειτα να αποχωρήσει από το δωμάτιο.
Σημειώστε ότι ο φυλακισμένος μπορεί είτε να αλλάξει είτε να διατηρήσει τον τρέχοντα αριθμό.
Η πρόκληση συνεχίζεται μετά από αυτό (εκτός έαν όλοι οι
φυλακισμένοι έχουν ήδη μπει στο δωμάτιο).
- Να προσδιορίσει μια τσάντα ως αυτή που έχει τα λιγότερα κέρματα. Αυτή η ενέργεια τερματίζει αμέσως την πρόκληση.
Ο φύλακας δεν θα ζητήσει από έναν φυλακισμένο που έχει βγει από το δωμάτιο να ξαναμπεί σε αυτό.
Οι φυλακισμένοι κερδίζουν την πρόκληση εάν ένας από αυτούς προσδιορίσει σωστά την τσάντα με τα λιγότερα κέρματα. Οι φυλακισμένοι χάνουν εάν κάποιος από αυτούς προσδιορίσει λανθασμένα την τσάντα, ή όταν και οι έχουν μπει στο δωμάτιο και δεν επιχείρησαν να αναγνωρίσουν την τσάντα με τα λιγότερα κέρματα.
Πριν την έναρξη της πρόκλησης, οι φυλακισμένοι συγκεντρώνονται στην αίθουσα φυλακών για να αποφασίσουν μια κοινή στρατηγική για αυτήν σε τρία βήματα.
- Επιλέγουν έναν μη-αρνητικό ακέραιο
, ο οποίος είναι ο μέγιστος που μπορεί ποτέ να θελήσουν να γράψουν στον ασπροπίνακα.
- Αποφασίζουν, για κάθε αριθμό
που είναι γραμμένος στον ασπροπίνακα (
), ποια τσάντα πρέπει να ελεγχθεί από έναν φυλακισμένο, ο οποίος διαβάζει τον αριθμό
στον ασπροπίνακα κατά την είσοδο του στο δωμάτιο.
- Αποφασίζουν ποια ενέργεια πρέπει να εκτελέσει ο φυλακισμένος στο δωμάτιο, αφού μάθει το πλήθος των κερμάτων στην επιλεγμένη τσάντα. Συγκεκριμένα, για κάθε αριθμό
που είναι γραμμένος στον ασπροπίνακα (
) και για κάθε πλήθος κερμάτων
που εντοπίστηκε στην ελεγχόμενη τσάντα (
), αποφασίζουν ένα από τα παρακάτω:
- ποιον αριθμό μεταξύ
και
(συμπεριλαμβανομένων) πρέπει να γραφτεί στον ασπροπίνακα ή
- ποια τσάντα πρέπει να προσδιοριστεί ως αυτή με τα λιγότερα κέρματα.
- ποιον αριθμό μεταξύ
Όταν κερδίσουν την πρόκληση, ο φύλακας θα απελευθερώσει τους φυλακισμένους αφού υπηρετήσουν ακόμη ημέρες.
Σκοπός σας είναι να επινοήσετε μια στρατηγική για τους φυλακισμένους η οποία θα τους εξασφαλίζει την νίκη της πρόκλησης (ανεξάρτητα από το πλήθος των κερμάτων στην τσάντα Α και στην τσάντα Β).
Η βαθμολογία της λύσης σας εξαρτάται από την τιμή του (δείτε την ενότητα Υποπροβλήματα για περισσότερες λεπτομέρειες).
Λεπτομέρειες Υλοποίησης
Πρέπει να υλοποιήσετε την παρακάτω διαδικασία:
int[][] devise_strategy(int N)
: το μέγιστο πλήθος κερμάτων σε κάθε τσάντα.
- Η διαδικασία πρέπει να επιστρέφει έναν πίνακα
από πίνακες με
ακεραίους, που αναπαριστούν την στρατηγική σας. Η τιμή του
είναι το μήκος του πίνακα
μείον ένα. Για κάθε
τέτοιο ώστε
, ο πίνακας
αναπαριστά τι θα κάνει ο φυλακισμένος αν διαβάσει τον αριθμό
στον ασπροπίνακα κατά την είσοδο του στο δωμάτιο:
- Η τιμή του
είναι
αν ο φυλακισμένος θα πρέπει να ελέγξει την τσάντα A, ή
αν ο φυλακισμένος θα πρέπει να ελέγξει την τσάντα B.
- Έστω
το πλήθος των κερμάτων μέσα στην επιλεγμένη τσάντα. Ο φυλακισμένος θα πρέπει να εκτελέσει την παρακάτω ενέργεια:
- Εάν η τιμή του
είναι
, ο φυλακισμένος θα πρέπει να προσδιορίσει πως η τσάντα A είναι αυτή με τα λιγότερα κέρματα.
- Εάν η τιμή του
είναι
, ο φυλακισμένος θα πρέπει να προσδιορίσει πως η τσάντα Β είναι αυτή με τα λιγότερα κέρματα.
- Εάν η τιμή του
είναι ένας μη-αρνητικός αριθμός, ο φυλακισμένος θα πρέπει να γράψει αυτόν τον αριθμό στον ασπροπίνακα. Σημειώστε ότι το
θα πρέπει να είναι το πολύ
.
- Εάν η τιμή του
- Η τιμή του
- Αυτή η διαδικασία καλείται ακριβώς μία φορά.
Παράδειγμα
Θεωρείστε την ακόλουθη κλήση:
devise_strategy(3)
Έστω δηλώνει τον αριθμό που ο φυλακισμένος διαβάζει από τον ασπροπίνακα κατά την είσοδο του στο δωμάτιο.
Μια από τις σωστές στρατηγικές είναι η ακόλουθη:
- Αν
(συμπεριλαμβανομένου του αρχικού αριθμού), έλεγξε την τσάντα A.
- Αν περιέχει
κέρμα, προσδιόρισε την τσάντα A ως αυτή με τα λιγότερα κέρματα.
- Αν περιέχει
κέρματα, προσδιόρισε την τσάντα Β ως αυτή με τα λιγότερα κέρματα.
- Αν περιέχει
κέρματα, γράψε
στον ασπροπίνακα (αντικαθιστώντας το
).
- Αν περιέχει
- Αν
, έλεγξε την τσάντα B.
- Αν περιέχει
κέρμα, προσδιόρισε την τσάντα Β ως αυτή με τα λιγότερα κέρματα.
- Αν περιέχει
κέρματα, προσδιόρισε την τσάντα A ως αυτή με τα λιγότερα κέρματα.
- Αν περιέχει
κέρματα, γράψε
στον ασπροπίνακα (αντικαθιστώντας το
). Σημειώστε ότι αυτή η περίπτωση δεν μπορεί να προκύψει, γιατί τότε καταλήγουμε στο συμπέρασμα ότι και οι δύο τσάντες περιέχουν
κέρματα, το οποίο δεν επιτρέπεται.
- Αν περιέχει
Για να δηλωθεί αυτή τη στρατηγική, η διαδικασία θα πρέπει να επιστρέψει [[0, -1, 1, -2], [1, -2, 0, -1]]
.
Το μήκος του επιστρεφόμενου πίνακα είναι , επομένως για αυτή την επιστρεφόμενη τιμή, η τιμή του
είναι
.
Περιορισμοί
Υποπροβλήματα
- (5 βαθμοί)
, η τιμή του
δεν πρέπει να είναι μεγαλύτερη από
.
- (5 βαθμοί)
, η τιμή του
δεν πρέπει να είναι μεγαλύτερη από
.
- (90 βαθμοί) Η τιμή του
δεν πρέπει να είναι μεγαλύτερη από
.
Εάν σε κάποιο από τα αρχεία ελέγχου, ο πίνακας που επιστρέφεται από την devise_strategy
δεν αντιπροσωπεύει μια σωστή στρατηγική, η βαθμολογία της λύσης σας για αυτό το υποπρόβλημα θα είναι .
Στο υποπρόβλημα 3 μπορείτε να λάβετε μερική βαθμολογία.
Έστω η μέγιστη τιμή του
για τους επιστρεφόμενους πίνακες σε όλα τα αρχεία ελέγχου αυτού του υποπροβλήματος.
Η βαθμολογία σας για αυτό το υποπρόβλημα υπολογίζεται σύμφωνα με τον παρακάτω πίνακα:
Συνθήκη | Βαθμοί |
---|---|
Υπόδειγμα Βαθμολογητή
O βαθμολογητής διαβάζει την είσοδο με την ακόλουθη μορφή:
- γραμμή
:
- γραμμή
(
):
- τελευταία γραμμή:
Κάθε γραμμή εκτός της πρώτης και τις τελευταίας αντιπροσωπεύει ένα σενάριο.
Αναφερόμαστε στο σενάριο που περιγράφεται στη γραμμή ως σενάριο
.
Στο σενάριο
η τσάντα A περιέχει
κέρματα και η τσάντα B περιέχει
κέρματα.
Ο βαθμολογητής αρχικά καλεί την devise_strategy(N)
.
Η τιμή του είναι το μήκος του πίνακα που επιστρέφει η κλήση, μείον ένα.
Στη συνέχεια, εάν ο βαθμολογητής εντοπίσει ότι ο πίνακας που επιστρέφει η
devise_strategy
δεν συμμορφώνεται με τους περιορισμούς, όπως αυτοί περιεγράφηκαν στις Λεπτομέρειες Υλοποίησης, τότε τυπώνει ένα από τα παρακάτω μηνύματα σφάλματος και τερματίζει:
s is an empty array
:είναι ένας κενός πίνακας (ο οποίος δεν αναπαριστά μια έγκυρη στρατηγική).
s[i] contains incorrect length
: Υπάρχει ένας δείκτης(
) τέτοιος ώστε το μήκος του
δεν είναι
.
First element of s[i] is non-binary
: Υπάρχει ένας δείκτης(
) τέτοιος ώστε το
δεν είναι ούτε
ούτε
.
s[i][j] contains incorrect value
: Υπάρχουν δείκτες(
) τέτοιοι ώστε το
δεν είναι μεταξύ
και
.
Σε διαφορετική περίπτωση, ο βαθμολογητής παράγει δύο εξόδους.
Πρώτη, ο βαθμολογητής εκτυπώνει την έξοδο της στρατηγικής σας με την ακόλουθη μορφή:
- γραμμή
(
): η έξοδος της στρατηγικής σας για το σενάριο
. Εάν η εφαρμογή της στρατηγικής οδηγεί στο ότι ένας φυλακισμένος προσδιορίζει την τσάντα Α ως αυτήν με τα λιγότερα κέρματα, τότε η έξοδος είναι ο χαρακτήρας
Α
. Εάν η εφαρμογή της στρατηγικής οδηγεί στο ότι ένας φυλακισμένος προσδιορίζει την τσάντα Β ως αυτήν με τα λιγότερα κέρματα, τότε η έξοδος είναι ο χαρακτήραςB
. Εάν η εφαρμογή της στρατηγικής οδηγεί στο ότι κανένας φυλακισμένος δεν προσδιορίζει μια τσάντα ως αυτήν με τα λιγότερα κέρματα, τότε η έξοδος είναι ο χαρακτήραςX
.
Δεύτερη, ο βαθμολογητής γράφει ένα αρχείο log.txt
στον τρέχοντα φάκελο με την ακόλουθη μορφή:
- γραμμή
(
):
Η ακολουθία στη γραμμή αντιστοιχεί στο σενάριο
και περιγράφει τους αριθμούς που γράφτηκαν στον ασπροπίνακα.
Συγκεκριμένα, το
είναι ο αριθμός που γράφτηκε από τον
φυλακισμένο που εισέρχεται στο δωμάτιο.
Comments