4237 - Araci: Difference between revisions
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 ⩽ | *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 | ||
== 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>