3174 - R10

From Bitnami MediaWiki

Cerința[edit | edit source]

Se dă un şir v cu n elemente numere reale. Acesta se împarte în n/k secvenţe de k elemente. Să se sorteze fiecare secvenţă şi să se afişeze şirul format de acestea, în ordinea în care au fost date.

Date de intrare[edit | edit source]

Datele de intrare conțin pe prima linie numărul n, şi numărul k, iar pe a doua linie n numere reale separate prin spații.

Date de ieșire[edit | edit source]

Datele de ieșire vor conține un mesaj de validitate (sau nu) a datelor introduse, iar pe următoarea linie şirul cerut.

Restricții și precizări[edit | edit source]

  • 1 ⩽ n ⩽ 100.000
  • 1 ⩽ k ⩽ 25.000
  • k îl divide pe n
  • numerele de pe a doua linie a fișierului de intrare, în modul, vor fi mai mici decât 1.000.000.000

Exemplu 1[edit | edit source]

intrare
10 2
10 9 8 7 6 5 4 3 2 1
ieșire
Date de intrare valide
9 10 7 8 5 6 3 4 1 2

Explicație[edit | edit source]

Şirul a fost împărţit în grupări de câte două, ele fiind sortate şi afişate în ordinea primită.

Exemplu 2[edit | edit source]

intrare
10 10
9.1 6 2 -1.5 6.9 10 11 1000 -101.5123 880.45
ieșire
Date de intrare valide
-101.512 -1.5 2 6 6.9 9.1 10 11 880.45 1000

Explicație[edit | edit source]

Acest exemplu conţine numere reale, nu neapărat întregi.

Exemplu 3[edit | edit source]

intrare
10 1
10 9 8 7 6 5 4 3 2 1
ieșire
Date de intrare valide
10 9 8 7 6 5 4 3 2 1

Explicație[edit | edit source]

Pentru k = 1, şirul rămâne la fel.

Exemplu 4[edit | edit source]

intrare
9 3
82 85 78 69 84 69 101 82 97
ieșire
Date de intrare valide
78 82 85 69 69 84 82 97 101

Explicație[edit | edit source]

Un ultim exemplu bonus.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python"> def validate_input(n, k, lst):

   if n % k != 0:
       print("Numarul de elemente nu este multiplu de k.")
       return 0
   for num in lst:
       try:
           float(num)
       except ValueError:
           print("Date invalide. Elementele trebuie sa fie numere reale.")
           return 0
   return 1


def solve(n, k, lst):

   sequences = [lst[i:i+k] for i in range(0, n, k)]
   sorted_sequences = [sorted(seq) for seq in sequences]
   result = [num for seq in sorted_sequences for num in seq]
   return result


if __name__ == "__main__":

   n, k = map(int, input().split())
   lst = input().split()
   if validate_input(n, k, lst):
       print("Date de intrare valide.")
       result = solve(n, k, lst)
       print(" ".join(map(str, result)))

</syntaxhighlight>

Explicație cod[edit | edit source]

Funcția `validate_input` primește trei argumente: `n` - numărul total de elemente, `k` - numărul de elemente din fiecare secvență și `lst` - lista cu toate elementele. Funcția verifică dacă numărul total de elemente este multiplu de `k` și dacă toate elementele sunt numere reale, returnând `1` dacă datele de intrare sunt valide și `0` altfel.

Funcția `solve` primește același set de date ca `validate_input`. Funcția împarte lista `lst` în secvențe de lungime `k`, sortează fiecare secvență în parte și apoi concatenază secvențele sortate. Rezultatul este o listă de elemente sortate.

În funcția principală `__main__`, se citesc datele de intrare și se verifică dacă acestea sunt valide cu ajutorul funcției `validate_input`. Dacă datele sunt valide, se afișează un mesaj corespunzător și se calculează rezultatul cu ajutorul funcției `solve`, urmat de afișarea rezultatului într-o singură linie cu ajutorul metodei `join`.