3174 - R10
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`.