3688 - Fata Morgana: Difference between revisions
Pagină nouă: == Cerinţa == Teodor se trezește în deșert singur, lipsit de ajutor și speriat. Fata Morgana vine la el și îi arată doi pumni, punându-l pe Teodor să aleagă unul dintre ei. Teodor e norocos și a evitat moartea sigură, dar trebuie să rezolve următoarea problemă pentru Fata Morgana. “Se dă un vector de '''n''' numere pozitive unde n este par. Poți rearanja numerele cum vrei. Care este valoarea maximă a produsului '''(v[1] - v[2]) * (v[3] - v[4]) * …. * (... |
|||
(4 intermediate revisions by 2 users not shown) | |||
Line 7: | Line 7: | ||
Fiindcă Fata Morgana nu e naivă, Teodor trebuie să afișeze cel mai mic lexicografic vector cu proprietatea dată, dar fiind lipsit de vlagă, acesta vă cere ajutorul. | Fiindcă Fata Morgana nu e naivă, Teodor trebuie să afișeze cel mai mic lexicografic vector cu proprietatea dată, dar fiind lipsit de vlagă, acesta vă cere ajutorul. | ||
== Date de intrare == | == Date de intrare == | ||
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații. | Programul citește de la tastatură numărul '''n''', iar apoi '''n''' numere naturale, separate prin spații. | ||
== Date de ieşire == | == Date de ieşire == | ||
Programul va afișa pe ecran n numere, reprezentând aranjarea cerută de Fata Morgana. | Programul va afișa pe ecran n numere, reprezentând aranjarea cerută de Fata Morgana. | ||
== Restricții și precizări == | == Restricții și precizări == | ||
* 1 ⩽ n ⩽ 300 | * 1 ⩽ n ⩽ 300 000 | ||
* 1 ⩽ v[i] ⩽ 2147483647 | * 1 ⩽ v[i] ⩽ 2147483647 | ||
== Exemplu == | |||
== Exemplu 1 == | |||
; Intrare | ; Intrare | ||
: 4 | : 4 | ||
: 3 2 1 1 | : 3 2 1 1 | ||
; Ieșire | ; Ieșire | ||
: Datele de intrare corespund restrictiilor impuse | |||
: 1 2 1 3 | : 1 2 1 3 | ||
<br> | |||
== Exemplu 2 == | |||
: 4 | |||
: 3 2 ab 1 | |||
; Ieșire | |||
: Datele de intrare nu corespund restrictiilor impuse | |||
<br> | |||
== Explicație == | == Explicație == | ||
'''(1-2) * (1-3) = 2''', acesta fiind produsul maxim posibil. | '''(1-2) * (1-3) = 2''', acesta fiind produsul maxim posibil. | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line>def rearrange_array( | <syntaxhighlight lang="python" line> | ||
def validare(numar, arr): # functia de validare a datelor de intrare | |||
if len(arr) != numar: | |||
raise ValueError | |||
if numar > 300000: | |||
raise ValueError | |||
for numar in arr: | |||
if not isinstance(numar, int) or numar < 1 or numar > 2147483647: | |||
raise ValueError | |||
print("Datele de intrare corespund restrictiilor impuse") | |||
def rearrange_array(arr): # functia de rezolvare | |||
# Sortăm vectorul în ordine crescătoare | # Sortăm vectorul în ordine crescătoare | ||
arr.sort() | arr.sort() | ||
Line 33: | Line 60: | ||
return arr | return arr | ||
result = rearrange_array( | if __name__ == '__main__': | ||
# din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam | |||
try: | |||
n = int(input("Introduceți numărul numar: ")) | |||
numbers = list(map(int, input("Introduceți cele {} numere separate prin spațiu: ".format(n)).split())) | |||
validare(n, numbers) # apelul functiei de validare | |||
result = rearrange_array(numbers) # apelul functiei de rezolvare | |||
print(" ".join(map(str, result))) | |||
except ValueError: | |||
print("Datele de intrare nu corespund restrictiilor impuse") | |||
except IndexError: | |||
print("Datele de intrare nu corespund restrictiilor impuse") | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 12:14, 13 November 2023
Cerinţa[edit | edit source]
Teodor se trezește în deșert singur, lipsit de ajutor și speriat. Fata Morgana vine la el și îi arată doi pumni, punându-l pe Teodor să aleagă unul dintre ei. Teodor e norocos și a evitat moartea sigură, dar trebuie să rezolve următoarea problemă pentru Fata Morgana.
“Se dă un vector de n numere pozitive unde n este par. Poți rearanja numerele cum vrei. Care este valoarea maximă a produsului (v[1] - v[2]) * (v[3] - v[4]) * …. * (v[n-1] * v[n]) dintr-o aranjare optimă?”
Fiindcă Fata Morgana nu e naivă, Teodor trebuie să afișeze cel mai mic lexicografic vector cu proprietatea dată, dar fiind lipsit de vlagă, acesta vă cere ajutorul.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.
Date de ieşire[edit | edit source]
Programul va afișa pe ecran n numere, reprezentând aranjarea cerută de Fata Morgana.
Restricții și precizări[edit | edit source]
- 1 ⩽ n ⩽ 300 000
- 1 ⩽ v[i] ⩽ 2147483647
Exemplu 1[edit | edit source]
- Intrare
- 4
- 3 2 1 1
- Ieșire
- Datele de intrare corespund restrictiilor impuse
- 1 2 1 3
Exemplu 2[edit | edit source]
- 4
- 3 2 ab 1
- Ieșire
- Datele de intrare nu corespund restrictiilor impuse
Explicație[edit | edit source]
(1-2) * (1-3) = 2, acesta fiind produsul maxim posibil.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> def validare(numar, arr): # functia de validare a datelor de intrare
if len(arr) != numar: raise ValueError
if numar > 300000: raise ValueError
for numar in arr: if not isinstance(numar, int) or numar < 1 or numar > 2147483647: raise ValueError
print("Datele de intrare corespund restrictiilor impuse")
def rearrange_array(arr): # functia de rezolvare
# Sortăm vectorul în ordine crescătoare arr.sort()
# Rearanjăm vectorul pentru a obține produsul maxim for i in range(1, n - 1, 2): arr[i], arr[i + 1] = arr[i + 1], arr[i]
return arr
if __name__ == '__main__':
# din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam try: n = int(input("Introduceți numărul numar: ")) numbers = list(map(int, input("Introduceți cele {} numere separate prin spațiu: ".format(n)).split()))
validare(n, numbers) # apelul functiei de validare result = rearrange_array(numbers) # apelul functiei de rezolvare print(" ".join(map(str, result)))
except ValueError: print("Datele de intrare nu corespund restrictiilor impuse") except IndexError: print("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>