3174 - R10: Difference between revisions

From Bitnami MediaWiki
Cata (talk | contribs)
Pagină nouă: ==Cerința== 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== 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== Datele de ieșire vor conține pe prima linie şirul cerut. ==Restricții și preciz...
 
Cata (talk | contribs)
No edit summary
 
(One intermediate revision by the same user not shown)
Line 6: Line 6:


==Date de ieșire==
==Date de ieșire==
Datele de ieșire vor conține pe prima linie şirul cerut.
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==
==Restricții și precizări==
* 1 n 100.000
* 1 ⩽ n ⩽ 100.000
* 1 k 25.000
* 1 ⩽ k ⩽ 25.000
* k îl divide pe n
* 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
* 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==
==Exemplu 1==
intrare
; intrare
 
: 10 2
10 2
: 10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
; ieșire
ieșire
: Date de intrare valide
 
: 9 10 7 8 5 6 3 4 1 2  
9 10 7 8 5 6 3 4 1 2  
===Explicație===
===Explicație===
Şirul a fost împărţit în grupări de câte două, ele fiind sortate şi afişate în ordinea primită.
Şirul a fost împărţit în grupări de câte două, ele fiind sortate şi afişate în ordinea primită.


==Exemplu 2==
==Exemplu 2==
intrare
; intrare
 
: 10 10
10 10
: 9.1 6 2 -1.5 6.9 10 11 1000 -101.5123 880.45
9.1 6 2 -1.5 6.9 10 11 1000 -101.5123 880.45
; ieșire
ieșire
: Date de intrare valide
 
: -101.512 -1.5 2 6 6.9 9.1 10 11 880.45 1000  
-101.512 -1.5 2 6 6.9 9.1 10 11 880.45 1000  
===Explicație===
===Explicație===
Acest exemplu conţine numere reale, nu neapărat întregi.
Acest exemplu conţine numere reale, nu neapărat întregi.


==Exemplu 3==
==Exemplu 3==
intrare
; intrare
 
: 10 1
10 1
: 10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
; ieșire
ieșire
: Date de intrare valide
 
: 10 9 8 7 6 5 4 3 2 1  
10 9 8 7 6 5 4 3 2 1  
===Explicație===
===Explicație===
Pentru k = 1, şirul rămâne la fel.
Pentru k = 1, şirul rămâne la fel.


==Exemplu 4==
==Exemplu 4==
intrare
; intrare
 
: 9 3
9 3
: 82 85 78 69 84 69 101 82 97
82 85 78 69 84 69 101 82 97
; ieșire
ieșire
: Date de intrare valide
 
: 78 82 85 69 69 84 82 97 101  
78 82 85 69 69 84 82 97 101  
===Explicație===
===Explicație===
Un ultim exemplu bonus.
Un ultim exemplu bonus.
Line 62: Line 58:
     if n % k != 0:
     if n % k != 0:
         print("Numarul de elemente nu este multiplu de k.")
         print("Numarul de elemente nu este multiplu de k.")
         exit()
         return 0
     for num in lst:
     for num in lst:
         try:
         try:
Line 68: Line 64:
         except ValueError:
         except ValueError:
             print("Date invalide. Elementele trebuie sa fie numere reale.")
             print("Date invalide. Elementele trebuie sa fie numere reale.")
             exit()
             return 0
    return 1
 


def solve(n, k, lst):
def solve(n, k, lst):
Line 76: Line 74:
     return result
     return result


def main():
 
if __name__ == "__main__":
     n, k = map(int, input().split())
     n, k = map(int, input().split())
     lst = input().split()
     lst = input().split()
     validate_input(n, k, lst)
     if validate_input(n, k, lst):
    result = solve(n, k, lst)
        print("Date de intrare valide.")
    print(" ".join(map(str, result)))
        result = solve(n, k, lst)
        print(" ".join(map(str, result)))
</syntaxhighlight>
==Explicație cod==
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.


if __name__ == "__main__":
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.
    main()


</syntaxhighlight>
Î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`.

Latest revision as of 06:34, 28 April 2023

Cerința[edit]

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]

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]

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]

  • 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]

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]

Ş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]

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]

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

Exemplu 3[edit]

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]

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

Exemplu 4[edit]

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]

Un ultim exemplu bonus.

Rezolvare[edit]

<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]

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