4237 - Araci: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
Line 1: Line 1:
== Cerință ==
== Cerință ==
Să se determine lungimea maximă L pe care o poate obține pentru cel puțin A araci tăind bambușii.
Să se determine lungimea maximă '''L''' pe care o poate obține pentru cel puțin '''A''' araci tăind bambușii.
== Date de intrare ==
== Date de intrare ==
Programul citește de la tastatură numerele n și A, iar apoi n numere naturale, separate prin spații, reprezentând dimensiunile tulpinilor de bambus.
Programul citește de la tastatură numerele '''n''' și '''A''', iar apoi '''n numere naturale''', separate prin spații, reprezentând dimensiunile tulpinilor de bambus.
== Date de ieșire ==
== Date de ieșire ==
Programul va afișa pe ecran L, reprezentând lungimea maximă posibilă a celor cel puțin A araci.
Programul va afișa pe ecran '''L''', reprezentând lungimea maximă posibilă a celor cel puțin A araci.
== Restricții de precizări ==
== Restricții de precizări ==
*3 ⩽ n ⩽ 100000
*3 ⩽ '''n''' ⩽ 100000
*1 ⩽ d ⩽ 30000
*1 ⩽ '''L''' ⩽ 30000
== Exemplul 1==
== Exemplul 1==
; Intrare
; Intrare
Line 15: Line 15:
: Datele introduse corespund restricțiilor impuse.
: Datele introduse corespund restricțiilor impuse.
: 14
: 14
<br>
== Exemplul 2 ==
== Exemplul 2 ==
; Intrare
; Intrare
Line 23: Line 22:
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele introduse corespund restricțiilor impuse.
: 15
: 15<br>
<br>
== Rezolvare ver. 1 ==
== Rezolvare ver. 1 ==
<syntaxhighlight lang="python" line="1" start="1">
def validare(n, A, bamboos):
    n = str(n)  # Convertim n la șir de caractere
    return n.isdigit() and 3 <= int(n) <= 100000
def calculate_max_length(n, A, bamboos):
    bamboos.sort()  # Se sortează lista de dimensiuni de bambus în ordine crescătoare
    max_length = 0  # Variabila pentru lungimea maximă
    count = 0  # Variabila pentru numărul de araci
    i = n - 1  # Indexul pentru parcurgerea listei de la sfârșit
    while i >= 0 and count < A:  # Se parcurge lista în ordine descrescătoare până când se obține numărul minim de araci
        max_length += bamboos[i]  # Se adaugă dimensiunea curentă de bambus la lungimea maximă
        count += 1  # Se incrementează numărul de araci
        i -= 1  # Se trece la următorul bambus
    return max_length  # Se returnează lungimea maximă
def main():
    n = int(input("Introduceti numarul de dimensiuni de bambus: "))
    A = int(input("Introduceti numarul minim de araci: "))
    bamboos = list(map(int, input("Introduceti dimensiunile separate prin spatii: ").split()))
    max_length = calculate_max_length(n, A, bamboos)
    print("Lungimea maxima posibila:", max_length)
    if validare(n, A, bamboos):
        print("Datele introduse corespund restricțiilor impuse.")
    else:
        print("Datele introduse nu corespund restricțiilor impuse.")
       
if __name__ == "__main__":
    main()
</syntaxhighlight>

Revision as of 11:50, 25 April 2023

Cerință

Să se determine lungimea maximă L pe care o poate obține pentru cel puțin A araci tăind bambușii.

Date de intrare

Programul citește de la tastatură numerele n și A, iar apoi n numere naturale, separate prin spații, reprezentând dimensiunile tulpinilor de bambus.

Date de ieșire

Programul va afișa pe ecran L, reprezentând lungimea maximă posibilă a celor cel puțin A araci.

Restricții de precizări

  • 3 ⩽ n ⩽ 100000
  • 1 ⩽ L ⩽ 30000

Exemplul 1

Intrare
4 1
6 10 14 9
Ieșire
Datele introduse corespund restricțiilor impuse.
14

Exemplul 2

Intrare
3
2
5 7 8
Ieșire
Datele introduse corespund restricțiilor impuse.
15

Rezolvare ver. 1

<syntaxhighlight lang="python" line="1" start="1"> def validare(n, A, bamboos):

   n = str(n)  # Convertim n la șir de caractere
   return n.isdigit() and 3 <= int(n) <= 100000

def calculate_max_length(n, A, bamboos):

   bamboos.sort()  # Se sortează lista de dimensiuni de bambus în ordine crescătoare
   max_length = 0  # Variabila pentru lungimea maximă
   count = 0  # Variabila pentru numărul de araci
   i = n - 1  # Indexul pentru parcurgerea listei de la sfârșit
   while i >= 0 and count < A:  # Se parcurge lista în ordine descrescătoare până când se obține numărul minim de araci
       max_length += bamboos[i]  # Se adaugă dimensiunea curentă de bambus la lungimea maximă
       count += 1  # Se incrementează numărul de araci
       i -= 1  # Se trece la următorul bambus
   return max_length  # Se returnează lungimea maximă


def main():

   n = int(input("Introduceti numarul de dimensiuni de bambus: "))
   A = int(input("Introduceti numarul minim de araci: "))
   bamboos = list(map(int, input("Introduceti dimensiunile separate prin spatii: ").split()))
   max_length = calculate_max_length(n, A, bamboos)
   print("Lungimea maxima posibila:", max_length)
   if validare(n, A, bamboos):
       print("Datele introduse corespund restricțiilor impuse.")
   else:
       print("Datele introduse nu corespund restricțiilor impuse.")
       

if __name__ == "__main__":

   main()

</syntaxhighlight>