2448 - Pătrate3: Difference between revisions

From Bitnami MediaWiki
Dragos1234 (talk | contribs)
No edit summary
Dragos1234 (talk | contribs)
 
(14 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Sursa: [https://www.pbinfo.ro/probleme/2448/patrate3]
Sursa: [https://www.pbinfo.ro/probleme/2448/patrate3]
== Cerinţa ==
== Cerinţa ==
Vrăjitorul vă cere să determinați numărul maxim de munți ce pot fi aduși la o înălțime egală.
Scrieţi un program care rezolvă următoarele două cerinţe:
 
1. Citește un număr natural M și determină numărul K de valori conținute de pătratul numerotat cu M;
 
2. Citește un număr natural N și determină numărul T al pătratului care conține numărul N pe una dintre laturi.


== Date de intrare ==
== Date de intrare ==
Pe prima linie a fișierului '''munti.in''' se va afla numărul natural '''N''', reprezentând numărul de munți existenți. Pe cea de-a doua linie se vor afla '''N''' valori naturale separate prin spațiu, reprezentând înălțimea inițială a fiecărui munte.
Fișierul de intrare '''patrate3.in''' conține pe prima linie un număr natural C reprezentând cerința din problemă care trebuie rezolvată (1 sau 2). Dacă C = 1, atunci fişierul conține pe a doua linie numărul natural M. Dacă C = 2, atunci fișierul conține pe a doua linie numărul natural N.


== Date de ieșire ==  
== Date de ieșire ==  
Fișierul '''munti.out''' va conține, pe prima și singura linie a fișierului, numărul maxim de munți ce pot fi aduși la o înălțime egală.
Dacă C = 1, atunci fişierul de ieşire '''patrate3.out''' conţine pe prima linie numărul K, reprezentând răspunsul la cerința 1 a problemei si mesajul "Datele introduse corespund cerintelor". Dacă C = 2, atunci fişierul de ieşire '''patrate3.out''' conţine pe prima linie numărul natural T, reprezentând răspunsul la cerinţa 2 și mesajul "Datele introduse corespund cerințelor." În caz contrar programul v-a afișa mesajul "Datele introduse nu corespund cenrintelor" și se va inceta executia programului.


== Restricţii şi precizări ==
== Restricţii şi precizări ==
* 1 ⩽ '''N''' ⩽ 1.000.000
* 1 ⩽ '''M''' ⩽ 260.000.000
* 1 ⩽ '''înalțimea inițială''' ⩽ 1.000.000.000
* 1 ⩽ '''N''' ⩽ 2.147.302.920
* Numerele N, M, T și K sunt numere naturale


== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Intrare
: 4
: ''patrate3.in''
: 2 6 2 2
: 1 3
; Ieșire
; Ieșire
: 4
: Datele introduse corespund cerințelor
: ''patrate3.out''
: 24
<br>
<br>


== Exemplul 2 ==
== Exemplul 2 ==
; Intrare
; Intrare
: 8
: ''patrate3.in''
: 2 6 2 2
: 0 0
; Ieșire
; Ieșire
: 7
: Datele introduse nu corespund cerințelor
<br>


== Rezolvare ==  
== Rezolvare ==  
Line 37: Line 45:
     if not (1 <= m <= 260000000):
     if not (1 <= m <= 260000000):
         return False
         return False
     if not (7 <= n <= 2147302920):
     if not (1 <= n <= 2147302920):
         return False
         return False
     # Verifică că M și N sunt numere naturale
     # Verifică că M și N sunt numere naturale
Line 85: Line 93:


== Explicatie rezolvare ==
== Explicatie rezolvare ==
Acest program validează inputul pentru o problemă specifică și apoi calculează un rezultat pe baza inputului.
Acest program citește date de intrare dintr-un fișier numit '''patrate3.in''', validează datele de intrare conform unor criterii prestabilite, rezolvă problema specifică (calculând o valoare pentru variabila output) și afișează rezultatul final într-un fișier numit '''patrate3.out'''.
În ceea ce privește validarea inputului, funcția validate_input primește doi parametri: '''n''' și '''x_list'''.  
 
n reprezintă numărul de înălțimi de verificat, iar '''x_list''' este o listă de înălțimi inițiale.
Funcția '''validate_input(m, n)''' verifică dacă m și n îndeplinesc anumite condiții și returnează True dacă sunt valide, sau False în caz contrar.
În cazul în care '''n''' este mai mic decât '''1''' sau mai mare decât '''1.000.000''' sau oricare dintre înălțimi este mai mică decât '''1''' sau mai mare decât '''1.000.000.000''', funcția afișează un mesaj de eroare și apoi iese din program.
 
Funcția main deschide două fișiere, "munti.in" și "munti.out", citind din fișierul de intrare '''munti.in''' valoarea lui '''n''' și lista de înălțimi '''x_list'''.  
Funcția '''read_input()''' deschide fișierul '''patrate3.in''', citește primul număr (cer) și al doilea număr (n) din prima linie, apoi le returnează sub formă de tuplu.
Apoi, apelând funcția '''validate_input''', se verifică validitatea inputului.
 
Dacă suma tuturor înălțimilor din listă este divizibilă cu '''n''', se afișează '''n''' în fișierul de ieșire '''munti.out'''.  
Funcția '''write_output(output)''' deschide fișierul "patrate3.out" și scrie valoarea output în el.
În caz contrar, se afișează '''n-1'''.
 
În general, acest program se ocupă de o problemă specifică care implică validarea inputului și apoi efectuarea unor calcule pe baza acelui input.
Funcția '''solve(cer, n)''' primește cer și n și returnează o valoare specifică în funcție de valoarea lui cer și n.
 
În secțiunea main, programul citește datele de intrare, verifică dacă sunt valide prin apelul funcției '''validate_input''', apoi rezolvă problema și afișează rezultatul final dacă datele de intrare sunt valide.

Latest revision as of 18:24, 12 May 2023

Sursa: [1]

Cerinţa[edit | edit source]

Scrieţi un program care rezolvă următoarele două cerinţe:

1. Citește un număr natural M și determină numărul K de valori conținute de pătratul numerotat cu M;

2. Citește un număr natural N și determină numărul T al pătratului care conține numărul N pe una dintre laturi.

Date de intrare[edit | edit source]

Fișierul de intrare patrate3.in conține pe prima linie un număr natural C reprezentând cerința din problemă care trebuie rezolvată (1 sau 2). Dacă C = 1, atunci fişierul conține pe a doua linie numărul natural M. Dacă C = 2, atunci fișierul conține pe a doua linie numărul natural N.

Date de ieșire[edit | edit source]

Dacă C = 1, atunci fişierul de ieşire patrate3.out conţine pe prima linie numărul K, reprezentând răspunsul la cerința 1 a problemei si mesajul "Datele introduse corespund cerintelor". Dacă C = 2, atunci fişierul de ieşire patrate3.out conţine pe prima linie numărul natural T, reprezentând răspunsul la cerinţa 2 și mesajul "Datele introduse corespund cerințelor." În caz contrar programul v-a afișa mesajul "Datele introduse nu corespund cenrintelor" și se va inceta executia programului.

Restricţii şi precizări[edit | edit source]

  • 1 ⩽ M ⩽ 260.000.000
  • 1 ⩽ N ⩽ 2.147.302.920
  • Numerele N, M, T și K sunt numere naturale

Exemplul 1[edit | edit source]

Intrare
patrate3.in
1 3
Ieșire
Datele introduse corespund cerințelor
patrate3.out
24


Exemplul 2[edit | edit source]

Intrare
patrate3.in
0 0
Ieșire
Datele introduse nu corespund cerințelor


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 2448

import math


def validate_input(m, n):

   if not (1 <= m <= 260000000):
       return False
   if not (1 <= n <= 2147302920):
       return False
   # Verifică că M și N sunt numere naturale
   if not isinstance(m, int) or not isinstance(n, int):
       return False
   # Verifică că nu există două pătrate cu același număr de valori scrise pe laturi
   num_values = [m, n]
   for i in range(2):
       count = num_values.count(num_values[i])
       if count > 1:
           return False
   return True


def read_input():

   with open("patrate3.in", "r") as f:
       cer, n = map(int, f.readline().split())
   return cer, n


def write_output(output):

   with open("patrate3.out", "w") as f:
       f.write(str(output))


def solve(cer, n):

   if cer == 1:
       return 8 * n
   else:
       m = int(math.sqrt(n))
       if m % 2 == 1:
           return (m + 1) // 2
       else:
           return m // 2


if __name__ == '__main__':

   cer, n = read_input()
   if not validate_input(cer, n):
       print("Datele introduse nu corespund cerintelor.")
   else:
       print("Datele introduse corespund cerintelor.")
       output = solve(cer, n)
       write_output(output)

</syntaxhighlight>

Explicatie rezolvare[edit | edit source]

Acest program citește date de intrare dintr-un fișier numit patrate3.in, validează datele de intrare conform unor criterii prestabilite, rezolvă problema specifică (calculând o valoare pentru variabila output) și afișează rezultatul final într-un fișier numit patrate3.out.

Funcția validate_input(m, n) verifică dacă m și n îndeplinesc anumite condiții și returnează True dacă sunt valide, sau False în caz contrar.

Funcția read_input() deschide fișierul patrate3.in, citește primul număr (cer) și al doilea număr (n) din prima linie, apoi le returnează sub formă de tuplu.

Funcția write_output(output) deschide fișierul "patrate3.out" și scrie valoarea output în el.

Funcția solve(cer, n) primește cer și n și returnează o valoare specifică în funcție de valoarea lui cer și n.

În secțiunea main, programul citește datele de intrare, verifică dacă sunt valide prin apelul funcției validate_input, apoi rezolvă problema și afișează rezultatul final dacă datele de intrare sunt valide.