1989-1 η ιεθνής Ολυµπιάδα Πληροφορικής Προβλήµατα 1st International Olympiad in Informatics Held in Pravetz, Bulgaria May 16-19, 1989. Έξι Προβλήµατα Παρουσιάστηκαν στη διενέργεια της ΙΟΙ 89 ***PROBLEM 1. (The one selected for the competition) Πρόβληµα 1 (Επιλέχθηκε για το διαγωνισµό από τη ISC) ίδονται 2*N πλαίσια στη γραµµή δίπλα-δίπλα (N<=5). ύο γειτνιάζοντα πλαίσια είναι κενά, και τα υπόλοιπα πλαίσια περιέχουν Ν-1 σύµβολα «Α» και Ν-1 σύµβολα «Β». Παράδειγµα για N=5: Α Β Β Α Α Β Α Β Κανόνας Ανταλλαγής Το περιεχόµενο δύο οποιονδήποτε γειτνιαζόντων µη κενών πλαισίων µπορεί να µεταφερθεί στα δύο κενά, χωρίς να αλλάξει η διάταξή τους. Στόχος: Να βρεθεί µια διάταξη όπου όλα τα «Α» να είναι τοποθετηµένα στα αριστερά όλων των «Β». Τα κενά πλαίσια µπορεί να είναι οπουδήποτε. Πρόβληµα: Γράψτε ένα πρόγραµµα το οποίο: 1. έχεται σαν είσοδο από το πληκτρολόγιο την αρχική διάταξη µε την µορφή διαδοχικών «Α» και «Β» και µηδενικών (στις θέσεις που αντιστοιχούν τα κενά πλαίσια). Κάθε ανταλλαγή θα εισάγεται µε έναν αριθµό (από 1 έως ν-1) του πρώτου εκ των δύο γειτονικών πλαισίων που πρόκειται να ανταλλαχθούν µε κενά. Το πρόγραµµα πρέπει να βρει τη διάταξη των πλαισίων µετά από την ανταλλαγή και να την εµφανίζει. 2. Λαµβάνοντας υπόψη µια δεδοµένη αρχική διάταξη να βρίσκει τουλάχιστον αλγόριθµο ανταλλαγής, ο οποίος θα επιτυγχάνει στο στόχο ή θα εµφανίζει ότι δεν υπάρχει δυνατότητα επίλυσης. Η έξοδος του προγράµµατος πρέπει να περιλαµβάνει την αρχική διάταξη και τις ενδιάµεσες διατάξεις για κάθε βήµα. 3. Να βρίσκει µε τον κατάλληλο αλγόριθµο, µέσω του οποίου θα φθάνει το τελικό αποτέλεσµα µε τον ελάχιστο αριθµό βηµάτων
***PROBLEM 2. Πρόβληµα 2 Τα πατώµατα σε ένα κτήριο είναι αριθµηµένα διαδοχικά µε τους ακεραίους 0, 1, 2,, Ν (N<=15). Υπάρχουν Κ (1<=K<=4) ανελκυστήρες στο κτήριο. Ο έλεγχος των ανελκυστήρων είναι κεντρικός και δέχεται δύο τύπους αιτηµάτων, που εισάγονται µε το πάτηµα κοµβίων. Εξωτερικά κοµβία (ένα για το αίτηµα κίνηση Επάνω και ένα για κίνηση Κάτω υπάρχουν σε κάθε πάτωµα και είναι κοινά για όλους τους ανελκυστήρες. Εσωτερικά επίσης κοµβία (αιτήµατα για να κινείται προς ένα δεδοµένο πάτωµα) βρίσκονται σε κάθε ανελκυστήρα. Αναπτύξτε ένα πρόγραµµα για να διαµορφωθεί ο έλεγχος της οµάδας ανελκυστήρων σύµφωνα µε τις παρακάτω συνθήκες 1. Υπάρχει ένας µόνος ανελκυστήρας στο κτήριο (K=1), και µπορεί να δεχτεί ένα µονό αίτηµα σε έναν χρόνο. Οποιοιδήποτε άλλο αίτηµα γίνεται αποδεκτό µετά το πέρας του προηγούµενου 2. Υπάρχουν αρκετοί ανελκυστήρες στα κτήρια (K>=1). Κάθε ένας από αυτούς δέχεται ένα εσωτερικό αίτηµα µόνο εάν δεν εκτελεί ένα άλλο αίτηµα. Η συσκευή ελέγχου του ανελκυστήρα µπορεί να καταχωρήσει αρκετά εισερχόµενα αιτήµατα συγχρόνως. Τα εσωτερικά αιτήµατα είναι υλοποιήσιµα από τον ανελκυστήρα, όπου εισήχθησαν. Η συσκευή ελέγχου επιλέγει έναν κατάλληλο ελεύθερο ανελκυστήρα για να εκπληρώσει κάθε εξωτερικό αίτηµα. 3. Εξετάστε την ίδια περίπτωση όπως στο 2, µε τον περιορισµό κατά τον οποίο οι άρτια αριθµηµένοι ανελκυστήρες µπορούν να σταµατήσουν σε άρτια αριθµηµένα πατώµατα, και οι περιττά αριθµηµένοι ανελκυστήρες σε περιττά αριθµηµένα πατώµατα µόνο. Όλοι οι ανελκυστήρες σταθµεύουν στο πάτωµα 0 4. Εξετάστε την περίπτωση 3, και υποθέστε ότι σε αυτήν µπορεί να έχετε διάφορα εκκρεµή εσωτερικά αιτήµατα από κάθε ανελκυστήρα, και όχι µόνο από ένα. Όλα τα εσωτερικά αιτήµατα γίνονται αποδεκτά και καταχωρείται, αντίστοιχη πληροφορία σχετικά µε το εάν ο ανελκυστήρας είναι ελεύθερος ή όχι. Πρόσθετες οδηγίες Κάποιος θα µπορούσε να δεχτεί ότι όλοι οι ανελκυστήρες είναι συγχρονισµένοι, και σε ίσα χρονικά διαστήµατα (clock ticks) κάθε ανελκυστήρας είναι σταθµευµένος σε ένα δεδοµένο πάτωµα. Κατά τη διάρκεια του επόµενου tick, ένας ανελκυστήρας θα µπορούσε να πάει ένα πάτωµα πάνω η κάτω, ή να παραµείνει στο ίδιο πάτωµα. Τα αιτήµατα (είσοδοι προγράµµατος) µπορούν να εισαχθούν σε οποιαδήποτε tick, και είναι των ακόλουθων τύπων: Α: Eξωτερικό - <αριθµός πατώµατος, διεύθυνση κίνησης (πάνω ή κάτω)> Β: Εσωτερικό - <αριθµός ανελκυστήρα, αριθµός πατώµατος> Αρκετά ή κανένα αιτήµατα µπορούν να εισαχθούν σε κάθε tick. Σε κάθε tick το πρόγραµµα πρέπει να εµφανίζει τις πληροφορίες για τη θέση κάθε ανελκυστήρα. Οι ανελκυστήρες είναι αρκετά µεγάλοι και δεν µπορούν να υπερφορτωθούν. Το πρόγραµµα πρέπει να ελέγξει τους ανελκυστήρες έτσι ώστε η συµπεριφορά τους να παρουσιάζει όσο το δυνατόν περισσότερη «νοηµοσύνη». Πρέπει να υπάρξουν ρητές εξηγήσεις για τη στρατηγική του ελέγχου των ανελκυστήρων
*** PROBLEM 3. Πρόβληµα 3. ίδεται µια οµάδα από Ν άτοµα. Κάθε άτοµο είναι φίλος µε περισσότερους από το [N/2] των άλλων και έχει λιγότερους από Κ εχθρούς. Ένα από τα άτοµα έχει ένα βιβλίο που καθένας θα επιθυµούσε να το διαβάσει και έπειτα να συζητήσει µε µερικούς από τους άλλους. Γράψτε ένα πρόγραµµα το οποίο: 1. Βρίσκει έναν τρόπο να γυρίσει το βιβλίο έτσι ώστε ο καθένας να το παίρνει µόνο µια φορά και να το περνά σε έναν από τους φίλους του. Αυτό επιστρέφει τελικά στον ιδιοκτήτη του 2. ιαιρεί τα άτοµα στις υποοµάδες του S για συζήτηση του βιβλίου. Ο καθένας δεν πρέπει να έχει περισσότερους από P εχθρούς στην υποοµάδα που µετέχει. Υποθέστε ότι S*P>=K.
***PROBLEM 4. ΠΡΟΒΛΗΜΑ 4. Εξετάστε τα µηνύµατα που γράφονται µε τη χρησιµοποίηση µόνο capital γραµµάτων /A-Z/ και των οκτώ σύµβολων:., + -: /;! Αυτά τα µηνύµατα στέλνονται µέσω ενός καναλιού επικοινωνίας σαν ακολουθία ψηφιολέξεων. Ο αριθµός του 1ου σε κάθε ψηφιολέξη πρέπει να δίνεται. 1. Προτείνετε µια κωδικοποίηση για τους παραπάνω χαρακτήρες από δυαδικές ακολουθίες, έτσι ώστε µια σαφής αποκωδικοποίηση να µπορεί να γίνεται και να στέλνεται ο λιγότερος δυνατός αριθµός bits µέσα από το κανάλι 2. Γράψτε ένα πρόγραµµα το οποίο: 2.1. Λαµβάνοντας υπόψη το κείµενο του µηνύµατος τυπώνει την κωδικοποίησή του έτοιµη για την αποστολή ως ακολουθία δεκαεξαδικών ψηφίων. 2.2. Λαµβάνοντας υπόψη το λαµβανόµενο κωδικοποιηµένο µήνυµα να το αποκωδικοποιεί και να εµφανίζει το αρχικό κείµενο
***PROBLEM 5. Πρόβληµα 5. Ας υποθέσουµε µια γραφική παράσταση (γράφηµα) µε Ν κορυφές κάθε µία από τις οποίες είναι βαθµού 3. Παράδειγµα B --------------- C \ / \ / \ / G \-----/ F H /-----\ E / \ / \ / \ A --------------- D Έτσι η κορυφή Χ, Υ και Ζ είναι δίπλα µε την κορυφή Τ. Λέµε ότι η κορυφή Υ είναι ο αριστερός και η κορυφή Ζ ο δεξιός γείτονας του Τ σε αντιστοιχία µε το Χ. Εάν η προσανατολισµένη γωνία XTZ είναι µικρότερη από τη γωνία XTY (θετικό αποτέλεσµα νοείται δεξιόστροφη κατεύθυνση). Παραδείγµατος χάριν, το Ε είναι ο δεξιός και ο G ο αριστερός γείτονας του H σε αντιστοιχία µε το Α επειδή η προσανατολισµένη γωνία AHE είναι µικρότερη από τη AHG γωνία. Γράψτε ένα πρόγραµµα που: 1. Εισάγει τις συντεταγµένες των κορυφών των γραφικών παραστάσεων και οι ακµές και οι γραµµές θα εµφανίζονται από τον υπολογιστή µε τη χρήση κατάλληλης κλίµακας. (Οι άκρες πρέπει να εµφανίζονται ως ευθείες γραµµές.) 2. Λαµβάνοντας υπόψη ένα ζευγάρι κορυφών X0 και X1 και µια ακολουθία από τα γράµµατα L και R, πρέπει να βρίσκει ένα µονοπάτι X0X1X2 Xn στη γραφική παράσταση, έτσι ώστε: - X0 και X1 να είναι οι πρώτες δύο κορυφές. - Xi+1 να είναι ο αριστερός ή ο δεξιός γείτονας του Χi µε προσδιορισµό του Xi-1 σε αντιστοιχία µε το (i-2)στό γράµµα στην ακολουθία γραµµάτων ελέγχου µεταξύ L και Ρ. Παράδειγµα: Το µονοπάτι για τη γραφική παράσταση από τα προηγούµενο παράδειγµα, χρησιµοποιεί το Α και το Η ως αρχικές κορυφές και η ακολουθία LRRLLR είναι AHGFEDCB. 3. Σχεδιάζει το µονοπάτι που αναφέρεται στο υποπρόβληµα 2 στην οθόνη. 4. Χρησιµοποιεί µια αρχική και µια τελική κορυφή, δηµιουργώντας ένα µονοπάτι που περνά από το λιγότερο δυνατό αριθµό κορυφών σχηµατίζοντάς το στην οθόνη και δίνοντας στις εξόδους τις δύο αρχικές κορυφές και την ακολουθία ελέγχου έτσι ώστε να είναι δυνατό να δηµιουργηθεί το αρχικό µονοπάτι όπως στο υποπρόβληµα 2.
***PROBLEM 6. Πρόβληµα 6. ίδεται ένα εικοσάεδρο. Είναι ένα κανονικό pπολύεδρο. Οι πλευρές του είναι όλες αριθµηµένες από 1 σε 20. Στο εικοσάεδρο πρέπει (κάποιος) να δροµολογηθεί έτσι ώστε να φθάσει σε κάθε µία πλευρά του µόνο µια φορά. Το κόστος C των διαδροµών καθορίζεται από το βαθµωτό τύπο: 20 C =SUM i*fi i=1 όπου το fi είναι ο αριθµός της πλευράς που προσπελαύνεται στο i-οστό βήµα Κάποιος µπορεί να περάσει από µια πλευρά σε άλλη µόνο εάν αυτές οι πλευρές είναι διαδοχικές. Α. ύο πλευρές θα είναι διαδοχικές εάν υπάρχει µια κοινή άκρη Β. ύο πλευρές θα είναι παρακείµενες εάν υπάρχει µια κοινή άκρη ή ένα κοινό σηµείο. Βρείτε τις διαδροµές µε το ελάχιστο κόστος για τις περιπτώσεις που δίνονται ανωτέρω. Παρατήρηση: Εάν για το χρόνο ή τη πολυπλοκότητα του αλγορίθµου εσείς δεν µπορέστε να µην βρείτε την βέλτιστη λύση, µπορείτε να προτείνετε µια ικανοποιητική.