COCI-09 (2009) - Γύρος #6 - 3 (Dosadan)

View as PDF

Submit solution

Points: 35 (partial)
Time limit: 1.0s
Memory limit: 32M

Author:
Problem type
Allowed languages
C, C++, Java, Pascal, Python
Dosadan

Ο Mirko έλαβε ένα μήνυμα από τον φίλο του Slavko. Ο Slavko, όντας κρυπτογράφος παγκόσμιας κλάσης, του αρέσει να κρυπτογραφεί τα μηνύματα που στέλνει στον Mirko. Αυτή τη φορά, αποφάσισε να χρησιμοποιήσει την κρυπτογράφηση One Time Pad. Το OTP είναι αδιαπέραστο εάν χρησιμοποιείται σωστά και ο Slavko το γνωρίζει αυτό. Ωστόσο, δεν θέλει ο Mirko να σπάσει το κεφάλι του σε ένα αδύνατο πρόβλημα, γι'αυτό έστειλε μερικές υποδείξεις μαζί με το μήνυμά του.

Ο Mirko γνωρίζει ότι το αρχικό απλό κείμενο (plain text) του Slavkos περιείχε μόνο μικρά γράμματα του αγγλικού αλφαβήτου ('a' - 'z'), τελεία '.' και κενό διάστημα ' ' (ASCII 32_{10}). Επίσης, γνωρίζει ότι ο Slavko χρησιμοποίησε μόνο τα ψηφία '0' έως 9 ως κλειδί του. Μετά από πολλή σκέψη, συνειδητοποίησε ότι μπορεί να προσδιορίσει τις θέσεις όλων των διαστημάτων και τελειών στο απλό κείμενο. Τώρα ζητάει από εσάς να γράψετε ένα πρόγραμμα που θα το κάνει αυτόματα.

Από τις προηγούμενες συναναστροφές του με τον Slavko, ο Mirko γνωρίζει πώς λειτουργεί η κρυπτογράφηση OTP. Ας δούμε ένα απλό παράδειγμα. Ας υποθέσουμε ότι θέλετε να κωδικοποιήσετε τη συμβολοσειρά "abc \; efg" χρησιμοποιώντας το "0120123" ως κλειδί.

  abc efg  
0120123
61\;62\;63\;20\;65\;66\;67
30\;31\;32\;30\;31\;32\;33
51\;53\;51\;10\;54\;54\;54
Αρχή ASCII δεκαεξαδικό Κρυπτογραφημένο μήνυμα

Αρχικά, μετατρέπετε τόσο το κλειδί όσο και το απλό κείμενο σε δεκαεξαδικούς αριθμούς χρησιμοποιώντας την κωδικοποίηση ASCII. Στη συνέχεια, εφαρμόζετε τον τελεστή του XOR σε κάθε ζεύγος. Η ακολουθία που προκύπτει είναι το κρυπτογραφημένο μήνυμα.

Είσοδος

Η πρώτη γραμμή περιέχει έναν ακέραιο N\;(1 \le N \le 1000) -αριθμός χαρακτήρων στο κρυπτογραφημένο μήνυμα.
Η επόμενη γραμμή περιέχει N ακέραιους αριθμούς, δεκαεξαδικούς, μεγαλύτερους ή ίσους με 0_{10} και μικρότερους ή ίσους με 127_{10} -το κρυπτογραφημένο μήνυμα.

Έξοδος

Η πρώτη και μοναδική γραμμή θα πρέπει να περιέχει N χαρακτήρες, με κάθε έναν να αντιπροσωπεύει έναν χαρακτήρα στο απλό κείμενο. Εάν ο i-οστός χαρακτήρας του απλού κειμένου είναι ένα γράμμα, ο i-οστός χαρακτήρας της εξόδου θα πρέπει να είναι μια παύλα '-', αν όχι, θα πρέπει να βάλετε τελεία '.'.

Παραδείγματα

input

7
51 53 51 10 54 54 54

output

---.---

input

7
53 53 51 54 54 51 10

output

------.

Comments

There are no comments at the moment.