COI-09 (2009) - Regional 1 (NOP)

View as PDF

Submit solution

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

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

Ο Mirko αγόρασε έναν νέο μικροεπεξεργαστή. Δυστυχώς, σύντομα έμαθε ότι πολλά από τα προγράμματά που έγραψε για τον παλιό του επεξεργαστή δεν δουλεύουν στον νέο επεξεργαστή.

Βαθιά μέσα στον τεχνικό φάκελο και για τους δύο επεξεργαστές, βρήκε μια εξήγηση. Ωστε να λειτουργεί πιο γρήγορα, ο νέος επεξεργαστής επιβάλλει ορισμένους περιορισμούς στον κώδικα μηχανής των προγραμμάτων, περιορισμούς που δεν υπήρχαν ποτέ στο προηγούμενο μοντέλο.

Ο κώδικας μηχανής ενός επεξεργαστή αποτελείται από εντολές που εκτελούνται διαδοχικά. Καθε εντολή χρησιμοποιεί ένα byte μνήμης. Επίσης, οι εντολές μπορεί να έχουν μηδέν ή περισσότερες παραμέτρους, καθεμία από τις οποίες χρησιμοποιεί ένα επιπλέον byte μνήμης. Στον κώδικα μηχανής, οι παράμετροι ακολουθούν αμέσως μια εντολή.

Όταν μορφοποιούνται ως κείμενο, οι εντολές κώδικα μηχανής είναι κεφαλαία γράμματα, ενώ οι παράμετροι είναι πεζά γράμματα. Για παράδειγμα:

A b c b B c c c D e f g h

Αυτό το πρόγραμμα αποτελείται από τέσσερις εντολές. Η πρώτη παίρνει τρεις παραμέτρους, η δεύτερη δύο, η τρίτη καμία και η τέταρτη παίρνει τέσσερις παραμέτρους. Το πρόγραμμα χρησιμοποιεί 13 byte μνήμης.

Το νέο μοντέλο επεξεργαστή ανακτά τη μνήμη σε κομμάτια τεσσάρων byte, επομένως κάθε εντολή πρέπει να ξεκινά από διεύθυνση μνήμης που διαιρείται με τέσσερα (το πρώτο byte στη μνήμη είναι η διεύθυνση 0). Για να το πετύχουμε αυτό, μπορούμε να εισάγουμε οδηγίες NOP (χωρίς λειτουργία) στο παλιό πρόγραμμα, οδηγίες που δεν κάνουν τίποτα και δεν περιορίζοντται σε θέσεις μνήμης που διαιρούνται με τέσσερα. Το παραπάνω πρόγραμμα, προσαρμοσμένο για να τρέχει στο νέο επεξεργαστή, μπορεί να μοιάζει με:

A b c b B c c NOP c NOP NOP NOP D e f g h

Οι εντολές A, B, C και D βρίσκονται τώρα στις θέσεις μνήμης 0,\,4\,\,8 και 12, γεγονός που ικανοποιεί τους περιορισμούς του επεξεργαστή.
Γράψτε ένα πρόγραμμα που να καθορίζει τον μικρότερο αριθμό εντολών NOP που πρέπει να εισαχθούν για να δουλέψει το συγκεκριμένο πρόγραμμα στο νέο μοντέλο επεξεργαστή.

Είσοδος

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

Έξοδος

Εξάγετε τον μικρότερο αριθμό εντολών NOP που απαιτούνται για την προσαρμογή του προγράμματος για τον νέο επεξεργαστή.

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

input

Abcd

output

0

input

EaEbFabG

output

5

input

AbcbBccCDefgh

output

4

Comments

There are no comments at the moment.