3688 - Fata Morgana: Difference between revisions

From Bitnami MediaWiki
No edit summary
 
(One intermediate revision by the same user 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.000
* 1 ⩽ n ⩽ 300 000
* 1 ⩽ v[i] ⩽ 2147483647
* 1 ⩽ v[i] ⩽ 2147483647
== Exemplu 1 ==
== Exemplu 1 ==
; Intrare
; Intrare

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>