4265 - perechiAB: Difference between revisions

From Bitnami MediaWiki
Flaviu (talk | contribs)
No edit summary
Flaviu (talk | contribs)
Line 41: Line 41:
def validate_input(n, v, A, B):
def validate_input(n, v, A, B):
     if n < 3 or n > 160000:
     if n < 3 or n > 160000:
         print("n nu respecta restricțiile impuse")
         print("Datele nu corespund restricțiilor impuse")
         return False
         return False
     for i in range(n):
     for i in range(n):
         if v[i] < 1 or v[i] > 1000000000:
         if v[i] < 1 or v[i] > 1000000000:
             print("valorile din v nu respecta restricțiile impuse")
             print("Datele nu corespund restricțiilor impuse")
             return False
             return False
     if A < 1 or B > 2000000000 or A > B:
     if A < 1 or B > 2000000000 or A > B:
         print("A si B nu respecta restricțiile impuse")
         print("Datele nu corespund restricțiilor impuse")
         return False
         return False
    print("Datele sunt introduse corect.")
     return True
     return True


Line 70: Line 71:
if __name__ == '__main__':
if __name__ == '__main__':
     n, v, A, B = read_input()
     n, v, A, B = read_input()
     print(numar_perechi(n, v, A, B))
     count = numar_perechi(n, v, A, B)
    if count is not None:
        print("Datele sunt introduse corect.")
        print(count)
    else:
        print("Datele nu corespund restricțiilor impuse.")




</syntaxhighlight>
== Explicație rezolvare ==
validate_input(n, v, A, B): Această funcție verifică dacă datele de intrare sunt valide sau nu. Aceasta verifică dacă valorile n, v, A și B respectă condițiile specifice impuse în enunț. În cazul în care nu respectă, afișează un mesaj de eroare și returnează False, altfel, returnează True.
numar_perechi(n, v, A, B): Această funcție calculează numărul de perechi de numere din vectorul v care se încadrează între valorile A și B, și returnează acest număr.


</syntaxhighlight>
read_input(): Această funcție citește datele de intrare (numărul de elemente din vectorul v, valorile vectorului v, valorile A și B) de la tastatură și le validează folosind funcția validate_input(). Dacă datele sunt corecte, returnează-le, altfel se termină programul.
 
Blocul if __name__ == '__main__': este blocul principal de cod care execută programul. Aceasta apelează funcția read_input() pentru a obține datele de intrare valide, apoi apelează funcția numar_perechi(n, v, A, B) pentru a calcula numărul de perechi de numere din vectorul v care se încadrează între valorile A și B, și afișează rezultatul.

Revision as of 17:17, 27 April 2023

Sursa: 4265 - perechiAb


Cerinţa

Se dă un șir v1, v2, …, vn de numere naturale nenule și de asemenea se dau două numere naturale nenule A și B. Să se determine numărul perechilor (vi , vj) cu i < j și A ≤ vi + vj ≤ B.

Date de intrare

Programul citește de la tastatură numărul n, apoi șirul de n numere naturale, separate prin spații, iar la final se citesc numerele naturale nenule A și B.

Date de ieșire

Programul va afișa pe ecran numărul de perechi care îndeplinesc condițiile cerute.

Restricţii şi precizări

  • 3 ≤ n ≤ 160.000
  • 1 ≤ A ≤ B ≤ 2.000.000.000
  • 1 ≤ vi ≤ 1.000.000.000

Exemplu

Intrare
5
1 2 3 4 5
7 10
Ieșire
4

Rezolvare

Rezolvare ver. 1

<syntaxhighlight lang="python" line>

  1. 4265 - perechiAB

n = int(input()) v = list(map(int, input().split())) A, B = map(int, input().split())

count = 0 for i in range(n-1):

   for j in range(i+1, n):
       if A <= v[i] + v[j] <= B:
           count += 1

print(count)

Rezolvare ver 1.1

def validate_input(n, v, A, B):

   if n < 3 or n > 160000:
       print("Datele nu corespund restricțiilor impuse")
       return False
   for i in range(n):
       if v[i] < 1 or v[i] > 1000000000:
           print("Datele nu corespund restricțiilor impuse")
           return False
   if A < 1 or B > 2000000000 or A > B:
       print("Datele nu corespund restricțiilor impuse")
       return False
   print("Datele sunt introduse corect.")
   return True

def numar_perechi(n, v, A, B):

   count = 0
   for i in range(n-1):
       for j in range(i+1, n):
           if A <= v[i] + v[j] <= B:
               count += 1
   return count

def read_input():

   n = int(input())
   v = list(map(int, input().split()))
   A, B = map(int, input().split())
   if not validate_input(n, v, A, B):
       exit()
   return n, v, A, B

if __name__ == '__main__':

   n, v, A, B = read_input()
   count = numar_perechi(n, v, A, B)
   if count is not None:
       print("Datele sunt introduse corect.")
       print(count)
   else:
       print("Datele nu corespund restricțiilor impuse.")


</syntaxhighlight>

Explicație rezolvare

validate_input(n, v, A, B): Această funcție verifică dacă datele de intrare sunt valide sau nu. Aceasta verifică dacă valorile n, v, A și B respectă condițiile specifice impuse în enunț. În cazul în care nu respectă, afișează un mesaj de eroare și returnează False, altfel, returnează True.

numar_perechi(n, v, A, B): Această funcție calculează numărul de perechi de numere din vectorul v care se încadrează între valorile A și B, și returnează acest număr.

read_input(): Această funcție citește datele de intrare (numărul de elemente din vectorul v, valorile vectorului v, valorile A și B) de la tastatură și le validează folosind funcția validate_input(). Dacă datele sunt corecte, returnează-le, altfel se termină programul.

Blocul if __name__ == '__main__': este blocul principal de cod care execută programul. Aceasta apelează funcția read_input() pentru a obține datele de intrare valide, apoi apelează funcția numar_perechi(n, v, A, B) pentru a calcula numărul de perechi de numere din vectorul v care se încadrează între valorile A și B, și afișează rezultatul.