1240 - Ab3: Difference between revisions

From Bitnami MediaWiki
Cata (talk | contribs)
Pagină nouă: ==Cerința== Să se determine pentru n numere a valoarea b maximă astfel încât b<sup>3</sup> + b ≤ a. ==Date de intrare== Datele de intrare conțin pe prima linie numărul n, iar pe următoarele n linii câte un număr a. ==Date de ieșire== datele de ieșire vor conține n linii cu câte un număr fiecare, răspunsul la fiecare întrebare. ==Restricții și precizări== * 1 ≤ n ≤ 100.000 * 0 ≤ a ≤ 10<sup>18</sup> ==Exemple== ===Intrare=== 5 1 9 36 27...
 
 
(2 intermediate revisions by one other user not shown)
Line 1: Line 1:
==Cerința==
==Cerința==
Să se determine pentru n numere a valoarea b maximă astfel încât b<sup>3</sup> + b a.
Să se determine pentru n numere a valoarea b maximă astfel încât b<sup>3</sup> + b &les; a.


==Date de intrare==
==Date de intrare==
Line 6: Line 6:


==Date de ieșire==
==Date de ieșire==
datele de ieșire vor conține n linii cu câte un număr fiecare, răspunsul la fiecare întrebare.
Datele de ieșire vor conține n linii cu câte un număr fiecare, răspunsul la fiecare întrebare, pe lângă mesajul de validare a datelor introduse ("Date de intrare valide" pentru date valide, "Date de intrare invalide" în caz contrar).


==Restricții și precizări==
==Restricții și precizări==
* 1 n 100.000
* 1 &les; n &les; 100.000
* 0 a 10<sup>18</sup>
* 0 &les; a &les; 10<sup>18</sup>


==Exemple==
==Exemple==
===Intrare===
; Intrare
 
: 5
5
: 1  
1  
: 9  
9  
: 36
36
: 27
27
: 89
89
; Ieșire
 
: Date de intrare valide
===Ieșire===
: 0
 
: 1
0
: 3
1
: 2
3
: 4
2
4


==Explicație==
==Explicație==
13 + 1 = 2
: 13 + 1 = 2
23 + 2 = 10
: 23 + 2 = 10
33 + 3 = 30
: 33 + 3 = 30
43 + 4 = 68
: 43 + 4 = 68
53 + 5 = 130
: 53 + 5 = 130


==Rezolvare==
==Rezolvare==
Line 46: Line 44:
             return False
             return False
     return True
     return True


def solve_problem(n, values):
def solve_problem(n, values):
Line 59: Line 58:
     return results
     return results


def main():
 
if __name__ == '__main__':
     n = int(input())
     n = int(input())
     values = []
     values = []
Line 66: Line 66:


     if validate_input(n, values):
     if validate_input(n, values):
        print("Date de intrare valide")
         results = solve_problem(n, values)
         results = solve_problem(n, values)
         for result in results:
         for result in results:
             print(result)
             print(result)
    else:
        print("Date de intrare invalide")
</syntaxhighlight>
==Explicație cod==
Această bucată de cod are două funcții principale:


if __name__ == '__main__':
1. Funcția `validate_input(n, values)`: Această funcție primește doi parametri: un număr întreg `n` și o listă de numere întregi `values`. Funcția verifică dacă `n` este în intervalul [1, 100000] și dacă fiecare valoare din lista `values` este în intervalul [0, 10^18]. Dacă oricare dintre aceste condiții nu este îndeplinită, funcția returnează `False`. În caz contrar, returnează `True`.
    main()
 
2. Funcția `solve_problem(n, values)`: Această funcție primește doi parametri: un număr întreg `n` și o listă de numere întregi `values`. Funcția rezolvă o problemă specifică și returnează o listă de șiruri de caractere. Pentru fiecare valoare `a` din lista `values`, funcția calculează cel mai mare număr întreg `b` pentru care `(b + step) ^ 3 + (b + step) <= a` pentru un anumit interval de `step`. Rezultatul final este o listă de șiruri de caractere, care reprezintă valorile pentru fiecare `b` calculat pentru fiecare valoare `a`.


</syntaxhighlight>
În funcția principală, se citește întâi numărul `n` și valorile asociate. Dacă valorile sunt valide (verificate prin apelul funcției `validate_input(n, values)`), atunci se afișează "Date de intrare valide". Apoi, se calculează rezultatele prin apelul funcției `solve_problem(n, values)` și se afișează. În caz contrar, se afișează "Date de intrare invalide".

Latest revision as of 20:54, 4 May 2023

Cerința[edit | edit source]

Să se determine pentru n numere a valoarea b maximă astfel încât b3 + b ⩽ a.

Date de intrare[edit | edit source]

Datele de intrare conțin pe prima linie numărul n, iar pe următoarele n linii câte un număr a.

Date de ieșire[edit | edit source]

Datele de ieșire vor conține n linii cu câte un număr fiecare, răspunsul la fiecare întrebare, pe lângă mesajul de validare a datelor introduse ("Date de intrare valide" pentru date valide, "Date de intrare invalide" în caz contrar).

Restricții și precizări[edit | edit source]

  • 1 ⩽ n ⩽ 100.000
  • 0 ⩽ a ⩽ 1018

Exemple[edit | edit source]

Intrare
5
1
9
36
27
89
Ieșire
Date de intrare valide
0
1
3
2
4

Explicație[edit | edit source]

13 + 1 = 2
23 + 2 = 10
33 + 3 = 30
43 + 4 = 68
53 + 5 = 130

Rezolvare[edit | edit source]

<syntaxhighlight lang="python"> def validate_input(n, values):

   if n < 1 or n > 100000:
       return False
   for value in values:
       if value < 0 or value > 10**18:
           return False
   return True


def solve_problem(n, values):

   st = 1 << 19
   results = []
   for i in range(n):
       a = values[i]
       b = 0
       for step in range(st, 0, -1):
           if (b + step) * (b + step) * (b + step) + (b + step) <= a:
               b += step
       results.append(str(b))
   return results


if __name__ == '__main__':

   n = int(input())
   values = []
   for i in range(n):
       values.append(int(input()))
   if validate_input(n, values):
       print("Date de intrare valide")
       results = solve_problem(n, values)
       for result in results:
           print(result)
   else:
       print("Date de intrare invalide")

</syntaxhighlight>

Explicație cod[edit | edit source]

Această bucată de cod are două funcții principale:

1. Funcția `validate_input(n, values)`: Această funcție primește doi parametri: un număr întreg `n` și o listă de numere întregi `values`. Funcția verifică dacă `n` este în intervalul [1, 100000] și dacă fiecare valoare din lista `values` este în intervalul [0, 10^18]. Dacă oricare dintre aceste condiții nu este îndeplinită, funcția returnează `False`. În caz contrar, returnează `True`.

2. Funcția `solve_problem(n, values)`: Această funcție primește doi parametri: un număr întreg `n` și o listă de numere întregi `values`. Funcția rezolvă o problemă specifică și returnează o listă de șiruri de caractere. Pentru fiecare valoare `a` din lista `values`, funcția calculează cel mai mare număr întreg `b` pentru care `(b + step) ^ 3 + (b + step) <= a` pentru un anumit interval de `step`. Rezultatul final este o listă de șiruri de caractere, care reprezintă valorile pentru fiecare `b` calculat pentru fiecare valoare `a`.

În funcția principală, se citește întâi numărul `n` și valorile asociate. Dacă valorile sunt valide (verificate prin apelul funcției `validate_input(n, values)`), atunci se afișează "Date de intrare valide". Apoi, se calculează rezultatele prin apelul funcției `solve_problem(n, values)` și se afișează. În caz contrar, se afișează "Date de intrare invalide".