Σύγκριση φυτών (plants)
Ο Hazel ο βοτανολόγος επισκέφτηκε μια έκθεση στον Βοτανικό Κήπο της Σιγκαπούρης. Σε αυτή την έκθεση, φυτά με διακριτά ύψη τοποθετούνται σε κύκλο. Τα φυτά είναι αριθμημένα από το μέχρι το
δεξιόστροφα, με το φυτό
να είναι δίπλα στο φυτό
.
Για κάθε φυτό (
), ο Hazel συγκρίνει το φυτό
με κάθε ένα από τα επόμενα
φυτά δεξιόστροφα και καταγράφει τον αριθμό
που δηλώνει πόσα από αυτά τα
φυτά είναι ψηλότερα από το φυτό
. Επομένως, η τιμή του
εξαρτάται από τα σχετικά ύψη κάποιων
διαδοχικών φυτών.
Για παράδειγμα, έστω ότι ,
και
. Τα επόμενα
φυτά δεξιόστροφα από το φυτό
είναι το φυτό
και το φυτό
. Αν το φυτό
είναι ψηλότερο από το φυτό
και το φυτό
κοντύτερο από το φυτό
, ο Hazel πρέπει να καταγράψει
.
Μπορείτε να υποθέσετε ότι η Hazel έχει καταγράψει σωστά τις τιμές των . Επομένως, υπάρχει τουλάχιστον μία διάταξη διακριτών υψών των φυτών που να είναι συνεπής με αυτές τις τιμές.
Σας ανατέθηκε να συγκρίνετε τα ύψη για ζεύγη φυτών. Δυστυχώς, δεν έχετε πρόσβαση στην
έκθεση. Η μόνη πηγή πληροφοριών σας είναι το σημειωματάριο του Hazel με την τιμή
και την ακολουθία τιμών
, ...,
.
Για κάθε ζεύγος διαφορετικών φυτών και
που πρέπει να συγκριθούν, προσδιορίστε ποια από τις τρεις ακόλουθες καταστάσεις συμβαίνει:
- Το φυτό
είναι σίγουρα ψηλότερο από το φυτό
: σε οποιαδήποτε διάταξη διακριτών υψών
, ...,
που είναι συνεπής με τον πίνακα , ισχύει
.
- Το φυτό
είναι σίγουρα κοντύτερο από το φυτό
: σε οποιαδήποτε διάταξη διακριτών υψών
, ...,
που είναι συνεπής με τον πίνακα , ισχύει
.
- Δε γνωρίζουμε με βεβαιότητα το αποτέλεσμα της σύγκρισης: δεν ισχύει καμία από τις δύο προηγούμενες περιπτώσεις.
Λεπτομέρειες Υλοποίησης
Πρέπει να υλοποιήσετε τις παρακάτω συναρτήσεις:
void init(int k, int[] r)
:το πλήθος των διαδοχικών φυτών των οποίων το ύψος καθορίζει κάθε μεμονωμένη τιμή
.
: ένας πίνακας μήκους
, όπου
είναι το πλήθος των φυτών που είναι ψηλότερα από το φυτό
ανάμεσα στα επόμενα
φυτά, δεξιόστροφα.
- Αυτή η συνάρτηση καλείται μόνο μία φορά, πριν από οποιαδήποτε κλήση της compare_plants.
int compare_plants(int x, int y)
,
: οι αριθμοί των φυτών που θα συγκριθούν.
- Αυτή η συνάρτηση πρέπει να επιστρέφει:
1
αν το φυτόείναι σίγουρα ψηλότερο από το φυτό
,
-1
αν το φυτόείναι σίγουρα κοντύτερο από το φυτό
,
0
αν δε γνωρίζουμε με βεβαιότητα το αποτέλεσμα της σύγκρισης.
- Αυτή η συνάρτηση καλείται ακριβώς
φορές.
Παραδείγματα
Παράδειγμα 1
Θεωρήστε την ακόλουθη κλήση:
init(3, [0, 1, 1, 2])
Έστω ότι ο βαθμολογητής καλεί την compare_plants(0, 2). Αφού , γνωρίζουμε ότι το φυτό
δεν είναι ψηλότερο από το φυτό
. Επομένως, η κλήση πρέπει να επιστρέψει
1
.
Έστω ότι ο βαθμολογητής καλεί την compare_plants(1, 2) μετά. Για όλες τις πιθανές διατάξεις υψών που είναι συνεπείς με τους παραπάνω περιορισμούς, το φυτό είναι κοντύτερο από το φυτό
. Επομένως, η κλήση πρέπει να επιστρέψει
-1
.
Παράδειγμα 2
Θεωρήστε την ακόλουθη κλήση:
init(2, [0, 1, 0, 1])
Έστω ότι ο βαθμολογητής καλεί την compare_plants(0, 3). Αφού , γνωρίζουμε ότι το φυτό
είναι ψηλότερο από το φυτό
. Επομένως, η κλήση πρέπει να επιστρέψει
1
.
Έστω ότι ο βαθμολογητής μετά καλεί την compare_plants(1, 3). Δύο διατάξεις υψών και
είναι συνεπείς με τις μετρήσεις του Hazel. Εφόσον το φυτό
είναι κοντύτερο από το φυτό
στη μια διάταξη και ψηλότερο στην άλλη, η κλήση πρέπει επιστρέψει
0
.
Περιορισμοί
(για κάθε
)
- Υπάρχει τουλάχιστον μία διάταξη διακριτών υψών των φυτών που να είναι συνεπής με τον πίνακα
.
Υποπροβλήματα
- (
βαθμοί)
- (
βαθμοί)
- (
βαθμοί)
- (
βαθμοί) Η σωστή απάντηση για κάθε κλήση της compare_plants είναι
ή
.
- (
βαθμοί)
- (
βαθμοί)
για κάθε κλήση της compare_plants.
- (
βαθμοί) Κανένας επιπλέον περιορισμός.
Υπόδειγμα βαθμολογητή
Το υπόδειγμα βαθμολογητή διαβάζει την είσοδο στην εξής μορφή:
- γραμμή 1:
- γραμμή 2:
- γραμμή 3 +
(
): για την
-οστή κλήση της compare_plants
Το υπόδειγμα βαθμολογητή τυπώνει τις απαντήσεις σας στην εξής μορφή:
- γραμμή 1 +
(
): η τιμή που επιστρέφει η
-οστή κλήση της compare_plants.
Comments