Παπούτσια
Ο Αντνάν είναι ιδιοκτήτης του μεγαλύτερου καταστήματος παπουτσιών στο Μπακού. Ένα κιβώτιο που περιέχει ζεύγη παπουτσιών έχει μόλις φτάσει στο κατάστημα. Κάθε ζεύγος παπουτσιών έχει δύο παπούτσια του ίδιου μεγέθους: ένα αριστερό και ένα δεξί. Ο Αντνάν έχει τοποθετήσει και τα
παπούτσια σε μία σειρά, η οποία αποτελείται από
θέσεις αριθμημένες από το
μέχρι το
, από τα αριστερά
προς τα δεξιά.
Ο Αντνάν θέλει να αλλάξει τη σειρά των παπουτσιών σε μία έγκυρη διάταξη. Μία διάταξη είναι έγκυρη, αν και μόνο αν για κάθε (
) ισχύουν οι ακόλουθες συνθήκες:
- Τα παπούτσια στις θέσεις
και
έχουν το ίδιο μέγεθος.
- Το παπούτσι στη θέση
είναι αριστερό παπούτσι.
- Το παπούτσι στη θέση
είναι δεξί παπούτσι.
Για να το πετύχει αυτό, ο Αντνάν μπορεί να κάνει μία σειρά αντιμεταθέσεων. Σε κάθε αντιμετάθεση, επιλέγει δύο παπούτσια που είναι γειτονικά εκείνη τη στιγμή και τα αντιμεταθέτει (δηλαδή τα σηκώνει και τοποθετεί κάθε ένα από αυτά στη θέση που βρισκόταν το άλλο). Δύο παπούτσια είναι γειτονικά, αν οι θέσεις τους διαφέρουν κατά ένα.
Να βρείτε το ελάχιστο πλήθος αντιμεταθέσεων που πρέπει να κάνει ο Αντνάν για να πετύχει μία έγκυρη διάταξη των παπουτσιών.
Λεπτομέρειες υλοποίησης
Να υλοποιήσετε την ακόλουθη συνάρτηση:
int64 count_swaps(int[] S)
: ένας πίνακας αποτελούμενος από
ακεραίους. Για κάθε
(
), το
είναι μία μη-μηδενική τιμή που ισούται με το μέγεθος του παπουτσιού που τοποθετήθηκε αρχικά στη θέση
. Εδώ, το |
| δηλώνει την απόλυτη τιμή του
, που ισούται
με αν
και ισούται με
αν
. Αν
, τότε το παπούτσι στη θέση
είναι αριστερό παπούτσι, αλλιώς είναι δεξί παπούτσι.
- Αυτή η συνάρτηση πρέπει να επιστρέφει το ελάχιστο πλήθος αντιμεταθέσεων (γειτονικών παπουτσιών) που πρέπει να γίνουν, ώστε να επιτευχθεί μία έγκυρη διάταξη.
Παραδείγματα
Παράδειγμα 1
Έστω ότι έχουμε την ακόλουθη κλήση της συνάρτησης:
count_swaps([2, 1, -1, -2])
Ο Αντνάν μπορεί να πετύχει μια έγκυρη διάταξη με αντιμεταθέσεις.
Για παράδειγμα, μπορεί πρώτα να αντιμεταθέσει τα παπούτσια και
, μετά τα
και
, ακολούθως τα
και
και, τέλος, τα
και
. Πετυχαίνει λοιπόν την ακόλουθη έγκυρη διάταξη: [
]. Είναι αδύνατο να πετύχει μία έγκυρη διάταξη
με λιγότερες από
αντιμεταθέσεις. Επομένως, η συνάρτηση πρέπει να επιστρέψει
4
.
Παράδειγμα 2
Στο ακόλουθο παράδειγμα, όλα τα παπούτσια έχουν το ίδιο μέγεθος:
count_swaps([-2, 2, 2, -2, -2, 2])
Ο Αντνάν μπορεί να αντιμεταθέσει τα παπούτσια στις θέσεις και
για να πετύχει την έγκυρη διάταξη [
], επομένως η συνάρτηση πρέπει να επιστρέψει
1
.
Περιορισμοί
- Για κάθε
(
),
.
- Είναι πάντα δυνατό να επιτευχθεί μία έγκυρη διάταξη των παπουτσιών με κάποιο αριθμό αντιμεταθέσεων.
Υποπροβλήματα
- (
βαθμοί)
- (
βαθμοί)
- (
βαθμοί) Όλα τα παπούτσια έχουν το ίδιο μέγεθος.
- (
βαθμοί) Όλα τα παπούτσια στις θέσεις
είναι αριστερά παπούτσια και όλα τα παπούτσια στις θέσεις
είναι δεξιά παπούτσια. Επιπλέον, για κάθε
(
), τα παπούτσια στις θέσεις
και
έχουν το ίδιο μέγεθος.
- (
βαθμοί)
- (
βαθμοί) Κανένας επιπλέον περιορισμός.
Υποδειγματικός βαθμολογητής
Ο υποδειγματικός βαθμολογητής διαβάζει την είσοδο ως εξής:
- γραμμή
:
- γραμμή
:
Ο υποδειγματικός βαθμολογητής τυπώνει μία γραμμή που περιέχει την τιμή που επιστρέφει η συνάρτηση count_swaps.
Comments