ΠΔΠ-38 (2026) - Α' Φάση - 4 (bqueries)
View as PDFΔυαδικά ερωτήματα
Κουρασμένος από το κουβάλημα των κουτιών από την αποθήκη του Γιάννη πίσω στη δική του, ο Τάκης έκατσε στο γραφείο του για να προσπαθήσει να σκεφτεί ένα θέμα για την Α' Φάση του ΠΔΠ.
Πάνω στις δοκιμές που έκανε στο χαρτί του παρατήρησε ότι
όπου
η bitwise πράξη KAI (δείτε εδώ τον ορισμό της).
Αυτό του φάνηκε πολύ ενδιαφέρον και θέλησε να μάθει πόσο συχνά ισχύει ότι το bitwise
δύο αριθμών ισούται με έναν από αυτούς.
Συγκεκριμένα έχει ερωτήματα της μορφής
, όπου
και
είναι μη αρνητικοί ακέραιοι και
.
Η απάντηση ενός τέτοιου ερωτήματος είναι το πλήθος ζευγών
τέτοιων ώστε
και
, για τα οποία ισχύει:
Απαντήστε τα ερωτήματα του Τάκη, όσο αυτός ψάχνει να βρει ενδιαφέροντα θέματα και για την Β' Φάση.
Πρόβλημα
Να γράψετε ένα πρόγραμμα σε μία από τις γλώσσες του ΠΔΠ (PASCAL, C, C++, JAVA) το οποίο θα διαβάζει τα δεδομένα εισόδου από το αρχείο bqueries.in και θα εκτυπώνει τα αποτελέσματα στο αρχείο bqueries.out.
Αρχεία εισόδου (bqueries.in)
Η πρώτη γραμμή περιέχει έναν ακέραιο αριθμό : το πλήθος των ερωτημάτων του Τάκη.
Ακολουθούν
γραμμές, καθεμία από τις οποίες περιέχει δύο ακέραιους αριθμούς
και
: το
-οστό ερώτημα.
Αρχεία εξόδου (bqueries.out)
Πρέπει να αποτελείται από γραμμές, καθεμία από τις να περιέχει έναν ακέραιο αριθμό: την απάντηση στο
-οστό ερώτημα.
Παράδειγμα αρχείων εισόδου - εξόδου:
Είσοδος:
2
3 7
777777 888888
Έξοδος:
11
75497532
Εξήγηση:
Για το πρώτο ερώτημα, τα ζεύγη ακεραίων από
έως και
που ικανοποιούν το ζητούμενο είναι:
,
,
,
,
,
,
,
,
,
και
.
Περιορισμοί
Υποπροβλήματα:
- (13 βαθμοί)
,
, για κάθε
(όπου
).
- (16 βαθμοί)
,
, για κάθε
(όπου
).
- (21 βαθμοί) Για κάθε
(όπου
), υπάρχουν θετικοί ακέραιοι
,
τέτοιοι ώστε
και
- (27 βαθμοί)
, για κάθε
(όπου
).
- (23 βαθμοί) Δεν υπάρχουν περαιτέρω περιορισμοί.
Παρατηρήσεις:
- Μορφοποίηση: Στην είσοδο αλλά και στην έξοδο, κάθε γραμμή τερματίζει με έναν χαρακτήρα
newline. - Μέγιστος χρόνος εκτέλεσης:
sec.
- Μέγιστη διαθέσιμη μνήμη:
MB.
- Επικεφαλίδες στον πηγαίο κώδικα: Στην αρχή του πηγαίου κώδικά σας, θα πρέπει να χρησιμοποιήσετε τις παρακάτω επικεφαλίδες.
(* USER: username
LANG: PASCAL
TASK: bqueries *)
για κώδικα σε PASCAL
/* USER: username
LANG: C
TASK: bqueries */
για κώδικα σε C
/* USER: username
LANG: C++
TASK: bqueries */
για κώδικα σε C++
/* USER: username
LANG: Java
TASK: bqueries */
για κώδικα σε Java
Προσοχή: Η απάντηση μπορεί να υπερβαίνει το .
Επίσης, φροντίστε να διαβάζετε την είσοδο και να εκτυπώνετε την έξοδο αποδοτικά, ειδικά αν μεταφράζετε σε C++ ή Java.
Comments