3688 - Fata Morgana: Difference between revisions
No edit summary |
|||
(3 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 1 == | == Exemplu 1 == | ||
; Intrare | ; Intrare | ||
Line 20: | Line 22: | ||
: Datele de intrare corespund restrictiilor impuse | : Datele de intrare corespund restrictiilor impuse | ||
: 1 2 1 3 | : 1 2 1 3 | ||
<br> | |||
== Exemplu 2 == | == Exemplu 2 == | ||
: 4 | : 4 | ||
Line 25: | Line 28: | ||
; Ieșire | ; Ieșire | ||
: Datele de intrare nu corespund restrictiilor impuse | : Datele de intrare nu corespund restrictiilor impuse | ||
<br> | |||
== Explicație == | == Explicație == |
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>