Popcount
Το Miniature Algebraic Natural Relay (ονομάζεται επίσης MALNAR) είναι η πιο πρόσφατη τεχνολογική πρόοδος στην ακμάζουσα σφαίρα των μικρών προγραμματιζόμενων συσκευών. Μπορείτε να γράψετε τα δικά σας προγράμματα για αυτήν τη συσκευή χρησιμοποιώντας τη MalnarScript, μια εσωτερική γλώσσα προγραμματισμού με τα ακόλουθα χαρακτηριστικά:
- Η είσοδος στο πρόγραμμα είναι ένας μεμονωμένος μη αρνητικός ακέραιος αυστηρά μικρότερος από .
- Η έξοδος του προγράμματος είναι ένας ενιαίος μη αρνητικός ακέραιος αυστηρά μικρότερος από .
- Κατά τον προγραμματισμό σε MalnarScript, μπορείτε να χρησιμοποιήσετε μόνο μία ακέραια μεταβλητή των -bit χωρίς υπογραφή.
- Ο πηγαίος κώδικας του MalnarScript πρέπει να αποτελείται το πολύ από εντολές της μορφής οι οποίες εκτελούνται με τη σειρά και καθεμία από αυτές πρέπει να αποτελείται από το πολύ χίλιους χαρακτήρες. Το σύμβολο ορίζεται αναδρομικά ως εξής:
Με άλλα λόγια, το σύμβολο μπορεί είτε να είναι μια μεταβλητή , είτε να συμμορφώνεται με τον ορισμό του συμβόλου ή μπορεί (μέσα σε παρένθεση) να αντιπροσωπεύει μια διμελή έκφραση μέσα στην οποία κάθε τελεστής συμμορφώνεται με το ίδιο ορισμό.
Το σύμβολο στον παραπάνω ορισμό αντιπροσωπεύει έναν μη αρνητικό δεκαδικό ακέραιο αυστηρά μικρότερο από , ενώ το σύμβολο μπορεί να είναι είτε ή που αντιπροσωπεύουν (κατά σειρά) τις πράξεις πρόσθεσης, αφαίρεσης, bitwise or, bitwise and, αριστερή μετατόπιση και δεξιά μετατόπιση.
Επίσης ο χαρακτήρας μπορεί να εμφανιστεί το πολύ 5 φορές στο σύμβολο .
Στην περίπτωση υπερχείλισης ή υπορροής κατά την εκτέλεση των πράξεων πρόσθεσης και αφαίρεσης, το MalnarScript θα εκτελέσει αυτές τις λειτουργίες ως το υπόλοιπο ακέραίας διαίρεσης με το (modulo ) . Για παράδειγμα, όταν η παράσταση θα αξιολογηθεί σε 2 και η παράσταση θα εκτιμηθεί σε 5 στο MalnarScript.
Η δεξιά πλευρά της εξίσωσης σε κάθε εντολή αξιολογείται σε έναν μόνο αριθμό ο οποίος στη συνέχεια θα αποθηκευτεί στο . Για να αξιολογηθεί η έκφραση της δεξιάς πλευράς, το MalnarScript αντικαθιστά πρώτα κάθε εμφάνιση του με την τρέχουσα τιμή του. Στη συνέχεια, ο υπολογισμός της έκφρασης προχωρά όπως θα συνέβαινε σε οποιαδήποτε μαθηματική έκφραση, δηλ. οι παρενθέσεις έχουν προτεραιότητα. Σημειώστε ότι οι προτεραιότητες των τελεστών (όσον αφορά τη σειρά λειτουργίας) είναι άσχετες γιατί το τελικό αποτέλεσμα ορίζεται πλήρως με την τοποθέτηση παρενθέσεων.
Ο στόχος σας είναι να γράψετε ένα πρόγραμμα που βγάζει ένα πρόγραμμα στο MalnarScript το οποίο υπολογίζει τον αριθμό των σε μια δυαδική αναπαράσταση της τιμής εισόδου.
Είσοδος
Η πρώτη γραμμή περιέχει τους δύο ακέραιους και .
Έξοδος
Στην πρώτη γραμμή θα πρέπει να εξάγετε τον αριθμό των εντολών του παραγόμενου προγράμματος MalnarScript.
Στις υπόλοιπες γραμμές θα πρέπει να εξάγετε τις εντολές του προγράμματος που αναζητάτε. Κάθε εντολή πρέπει να εκτυπωθεί σε ξεχωριστή γραμμή και πρέπει να ικανοποιεί τη σύνταξη του MalnarScript όπως περιγράφεται στην περιγραφή της εργασίας.
Είναι σημαντικό να μην υπάρχουν περιττές κενές γραμμές ή επιπλέον χαρακτήρες κενού διαστήματος στην έξοδο. Κάθε γραμμή (συμπεριλαμβανομένης της τελευταίας) πρέπει να τερματίζεται με τον χαρακτήρα τέλους γραμμής ('\n').
Βαθμολογία
Υποπρόβλημα | Βαθμοί | Περιορισμοί |
1 | 15 | |
2 | 15 | |
3 | 35 | |
4 | 45 |
Παραδείγματα
input
2 2
output
1
A=(A-((A&2)>>1))
Επεξήγηση του 1ου παραδείγματος:
input
3 5
output
2
A=((A&4)|((A&3)-((A&2)>>1)))
A=((A&3)+((A&4)>>2))
Comments