1157 - KSort2

De la Universitas MediaWiki

Cerinţa

Se dă un vector cu n elemente, numere naturale și un număr k. Ordonați crescător primele k elemente ale vectorului și descrescător ultimele n-k elemente.Pentru sortare se va folosit metoda QuickSort sau MergeSort.

Date de intrare

Programul citește de la tastatură numerele n și k, iar apoi n numere naturale, reprezentând elementele vectorului.

Date de ieşire

Programul va afișa pe ecran elementele vectorului, separate prin exact un spațiu, după efectuarea operațiilor cerute.

Restricții și precizări

  • 1 ⩽ k < n ⩽ 200 000
  • cele n numere citite vor fi mai mici decât 1 000 000 000

Exemplul 1

Intrare
7 3
13 1 10 15 3 7 11
Ieșire
Datele introduse corespund restricțiilor impuse.
1 10 13 15 11 7 3


Exemplul 2

Intrare
fhgjfhgfgj
Ieșire
Datele introduse nu corespund restricțiilor impuse.


Rezolvare

# Definim funcția de verificare a valorilor n, k și a elementelor vectorului
def verificare(n_val, k_val, vector_verificare):
    # Verificăm dacă n și k respectă restricțiile problemei
    if 1 <= k_val < n_val <= 200000:
        # Verificăm dacă toate elementele vectorului sunt mai mici decât 1 000 000 000
        if all(x < 1000000000 for x in vector_verificare):
            # Dacă toate condițiile sunt îndeplinite, returnăm True
            return True
    return False


# Definim funcția pentru sortarea vectorului
def sortare_vector(k_val, vector_sortare):
    # Sortăm primele k elemente în ordine crescătoare
    vector_sortare[:k_val] = sorted(vector_sortare[:k_val])
    # Sortăm ultimele elemente în ordine descrescătoare
    vector_sortare[k_val:] = sorted(vector_sortare[k_val:], reverse=True)
    # Returnăm vectorul sortat
    return vector_sortare


if __name__ == '__main__':
    
    try:
        # Citim numărul de elemente din vector
        n = int(input("Introduceti numarul de elemente din vector: "))
        # Citim numărul k
        k = int(input("Introduceti numarul k: "))
        # Citim elementele vectorului
        vector = list(map(int, input("Introduceti elementele vectorului: ").split()))

        # Verificăm dacă datele introduse sunt valide
        if verificare(n, k, vector):
            # Dacă datele sunt valide, afișăm un mesaj de confirmare
            print("Datele introduse corespund restricțiilor impuse.")
            # Sortăm vectorul și afișăm rezultatul
            print(' '.join(map(str, sortare_vector(k, vector))))
        else:
            print("Datele introduse nu corespund restricțiilor impuse.")
    # Tratăm cazul în care datele introduse nu sunt numere
    except ValueError:
        print("Datele introduse nu corespund restricțiilor impuse.")