|
| 1 | +--- |
| 2 | +layout: statement |
| 3 | +codename: cauldron |
| 4 | +--- |
| 5 | + |
| 6 | +zzzzzzzzzzzzzzzzzzzzzzzzzΈστω |
| 7 | +Έστω μια ακολουθία αποτελούμενη από δυαδικά ψηφία (bits). Για τις |
| 8 | +ανάγκες αυτής της άσκησης, θα υπολογίζουμε την **υπογραφή** αυτής της |
| 9 | +ακολουθίας μετρώντας το πλήθος των διαδοχικών ψηφίων "1" (άσων) που |
| 10 | +εμφανίζονται σε αυτήν. Για παράδειγμα, έστω η ακολουθία: |
| 11 | + |
| 12 | +$$\texttt{00{\color{red}111}0{\textcolor{red}{11}}000{\color{red}1111}0{\color{red}1}}$$ |
| 13 | + |
| 14 | +Στην ακολουθία αυτή εμφανίζονται πρώτα τρεις ($$3$$) διαδοχικοί άσοι, μετά |
| 15 | +άλλοι δύο ($$2$$), μετά άλλοι τέσσερις ($$4$$) και στο τέλος άλλος ένας ($$1$$). Η |
| 16 | +υπογραφή λοιπόν αυτής της ακολουθίας αποτελείται από τέσσερις |
| 17 | +αριθμούς: $$3$$, $$2$$, $$4$$, $$1$$. Δηλαδή, για να βρούμε την υπογραφή μιας |
| 18 | +ακολουθίας, προσπερνάμε τα μηδενικά (λειτουργούν μόνο ως διαχωριστές) |
| 19 | +και μετράμε το πλήθος των συνεχόμενων άσων που συναντάμε. |
| 20 | + |
| 21 | +Προσέξτε ότι ακριβώς την ίδια υπογραφή έχει και η ακολουθία: |
| 22 | + |
| 23 | +$$\texttt{\textcolor{red}{111}0000\textcolor{red}{11}0\textcolor{red}{1111}00000\textcolor{red}{1}0000}$$ |
| 24 | + |
| 25 | +Σας δίνεται μία ακολουθία αποτελούμενη από $$N$$ δυαδικά ψηφία, κάποια |
| 26 | +από τα οποία είναι όμως σβησμένα: στη θέση τους υπάρχει το σύμβολο της |
| 27 | +τελείας. Για παράδειγμα: |
| 28 | + |
| 29 | +$$\texttt{00.\textcolor{red}{11}.\textcolor{red}{11}0....\textcolor{red}{1}..\textcolor{red}{1}}$$ |
| 30 | + |
| 31 | +Σας δίνεται επίσης μία επιθυμητή υπογραφή, π.χ. $$3$$, $$2$$, $$4$$, $$1$$. |
| 32 | +Με πόσους διαφορετικούς τρόπους μπορείτε να συμπληρώσετε τις τελείες |
| 33 | +με δυαδικά ψηφία, έτσι ώστε η ακολουθία δυαδικών ψηφίων που θα |
| 34 | +προκύψει να έχει τη δοθείσα υπογραφή; |
| 35 | + |
| 36 | +## Πρόβλημα |
| 37 | + |
| 38 | +Να αναπτύξετε ένα πρόγραμμα σε μια από τις γλώσσες Pascal, C, C++, |
| 39 | +Java το οποίο θα διαβάζει $$T$$ ερωτήματα της παραπάνω μορφής. Για κάθε |
| 40 | +ερώτημα θα δίνεται μια ακολουθία δυαδικών ψηφίων, από τα οποία κάποια |
| 41 | +θα είναι σβησμένα, και μια επιθυμητή υπογραφή. Για κάθε ερώτημα, το |
| 42 | +πρόγραμμά σας πρέπει να εκτυπώνει το πλήθος των τρόπων με τους |
| 43 | +οποίους μπορούν να συμπληρωθούν τα σβησμένα ψηφία, έτσι ώστε η |
| 44 | +ακολουθία που θα προκύψει να έχει την επιθυμητή υπογραφή. |
| 45 | + |
| 46 | +## Αρχεία εισόδου: |
| 47 | +Το αρχείο εισόδου με όνομα **bitsign.in** είναι αρχείο κειμένου με την εξής |
| 48 | +δομή. Η πρώτη γραμμή περιέχει έναν ακέραιο αριθμό $$T$$, το πλήθος των |
| 49 | +ερωτημάτων που θα ακολουθήσουν. Ακολουθούν τα $$T$$ ερωτήματα, που το |
| 50 | +καθένα περιγράφεται από τρεις γραμμές της εισόδου. Η πρώτη από αυτές |
| 51 | +θα περιέχει δύο ακέραιους αριθμούς $$N$$ και $$M$$, χωρισμένους μεταξύ τους με |
| 52 | +ένα κενό διάστημα: το πλήθος των ψηφίων της ακολουθίας και το πλήθος |
| 53 | +των αριθμών της υπογραφής. Η δεύτερη θα περιέχει μία συμβολοσειρά |
| 54 | +αποτελούμενη από $$N$$ χαρακτήρες που καθένας μπορεί να είναι "0", "1" ή "." |
| 55 | +(τελεία). Η τρίτη θα περιέχει $$M$$ θετικούς ακέραιους αριθμούς, χωρισμένους |
| 56 | +ανά δύο με ένα κενό διάστημα: την επιθυμητή υπογραφή. |
| 57 | + |
| 58 | +## Αρχεία εξόδου: |
| 59 | +Το αρχείο εξόδου με όνομα **bitsign.out** είναι αρχείο κειμένου με την εξής |
| 60 | +δομή. Θα πρέπει να περιέχει $$T$$ γραμμές: μία γραμμή για κάθε ερώτημα, |
| 61 | +κατά σειρά. Κάθε γραμμή θα πρέπει να περιέχει έναν ακέραιο, την |
| 62 | +απάντηση στο αντίστοιχο ερώτημα. Επειδή οι απαντήσεις μπορεί γενικά να |
| 63 | +είναι πολύ μεγάλοι αριθμοί, εκτυπώστε το υπόλοιπο (modulo) της διαίρεσής |
| 64 | +τους με τον αριθμό $$1.000.000.007$$. |
| 65 | + |
| 66 | +## Παράδειγμα αρχείου εισόδου – εξόδου |
| 67 | + |
| 68 | +| **bitsign.in** | **bitsign.out** | |
| 69 | +| :--- | :--- | |
| 70 | +| 5<br>7 3<br>...0111<br>1 1 3<br>14 3<br>0..00..000.110<br>1 1 3<br>15 4<br>.1.1.1.1.1.1.1.<br>1 3 1 6<br>13 3<br>.0..0.0001000<br>4 1 1<br>12 3<br>.111........<br>3 2 1 | 1<br>4<br>1<br>0<br>10 | |
| 71 | + |
| 72 | + |
| 73 | +*Εξήγηση:* Έχουμε $$T=5$$ ερωτήματα. |
| 74 | + - Στο πρώτο ερώτημα, μπορούμε να συμπληρώσουμε την ακολουθία μόνο με έναν τρόπο, έτσι ώστε να προκύψει η επιθυμητή υπογραφή (υπογραμμισμένα τα σβησμένα ψηφία που συμπληρώθηκαν): $$\texttt{\underline{\textcolor{red}{1}0\textcolor{red}{1}}0\textcolor{red}{111}}$$ |
| 75 | + - Στο δεύτερο όμως ερώτημα, για την ίδια υπογραφή, μπορούμε να συμπληρώσουμε την ακολουθία με τέσσερις διαφορετικούς τρόπους: $$\texttt{0\underline{\textcolor{red}{1}0}00\underline{\textcolor{red}{1}0}000\underline{\textcolor{red}{1}}\textcolor{red}{11}0}$$, $$\texttt{0\underline{\textcolor{red}{1}0}00\underline{0\textcolor{red}{1}}000\underline{\textcolor{red}{1}}\textcolor{red}{11}0}$$, $$\texttt{0\underline{0\textcolor{red}{1}}00\underline{\textcolor{red}{1}0}000\underline{\textcolor{red}{1}}\textcolor{red}{11}0}$$ και $$\texttt{0\underline{0\textcolor{red}{1}}00\underline{0\textcolor{red}{1}}000\underline{\textcolor{red}{1}}\textcolor{red}{111}0}$$ |
| 76 | + - Στο τρίτο ερώτημα, υπάρχει πάλι μόνο ένας τρόπος να συμπληρώσουμε την ακολουθία για να προκύψει η επιθυμητή υπογραφή: $$\texttt{\underline{0}\textcolor{red}{1}\underline{0}\textcolor{red}{1}\underline{\textcolor{red}{1}}\textcolor{red}{1}\underline{0}\textcolor{red}{1}\underline{0}\textcolor{red}{1}\underline{\textcolor{red}{1}}\textcolor{red}{1}\underline{\textcolor{red}{1}}\textcolor{red}{1}\underline{\textcolor{red}{1}}}$$ |
| 77 | + - Στο τέταρτο ερώτημα, δεν υπάρχει κανένας τρόπος με τον οποίο να μπορεί να προκύψει η επιθυμητή υπογραφή, καθώς δεν μπορούν να προκύψουν τέσσερις συνεχόμενοι άσοι. |
| 78 | + - Στο τελευταίο ερώτημα, η σωστή απάντηση είναι $$10$$. |
| 79 | + |
| 80 | +## Περιορισμοί: |
| 81 | + - $$1 \leq T \leq 10$$, |
| 82 | + - $$1 \leq N \leq 2.000$$ και $$1 \leq M \leq 1.000$$, |
| 83 | + - Το άθροισμα των μηκών των ακολουθιών όλων των ερωτημάτων δε θα υπερβαίνει το $$3.000$$. |
| 84 | + |
| 85 | +## Subtasks |
| 86 | + - Για περιπτώσεις ελέγχου συνολικής αξίας 20%, θα είναι $$N \leq 15$$. |
| 87 | + - Για περιπτώσεις ελέγχου συνολικής αξίας 30%, το πλήθος των σβησμένων ψηφίων κάθε ακολουθίας δε θα υπερβαίνει το $$15$$. |
| 88 | + - Για περιπτώσεις ελέγχου συνολικής αξίας 50%, θα είναι $$N \leq 100$$. |
| 89 | + |
| 90 | +**Προσοχή!** Φροντίστε να διαβάζετε την είσοδο και να εκτυπώνετε την έξοδο αποδοτικά, ειδικά αν προγραμματίζετε σε C++ ή Java. |
| 91 | + |
| 92 | +**Μορφοποίηση:** Στην έξοδο, όλες οι γραμμές τερματίζουν με ένα χαρακτήρα newline.<br> |
| 93 | +**Μέγιστος χρόνος εκτέλεσης:** 1 sec.<br> |
| 94 | +**Μέγιστη διαθέσιμη μνήμη:** 256 MB. |
0 commit comments