4265 - perechiAB: Difference between revisions

From Bitnami MediaWiki
Flaviu (talk | contribs)
No edit summary
Flaviu (talk | contribs)
No edit summary
 
(5 intermediate revisions by 2 users not shown)
Line 7: Line 7:
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.
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 ==  
== Date de ieșire ==  
Programul va afișa pe ecran numărul de perechi care îndeplinesc condițiile cerute.
Dacă datele sunt introduse corect, pe ecran se va afișa:
'''"Datele sunt introduse corect."''', apoi pe un rând nou '''va afișa pe ecran numărul de perechi care îndeplinesc condițiile cerute.''', reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: '''"Datele nu corespund restricțiilor impuse."'''.
== Restricţii şi precizări ==
== Restricţii şi precizări ==
* 3 ≤ n ≤ 160.000
* 3 ≤ n ≤ 160.000
* 1 ≤ A ≤ B ≤ 2.000.000.000
* 1 ≤ A ≤ B ≤ 2.000.000.000
* 1 ≤ vi ≤ 1.000.000.000
* 1 ≤ vi ≤ 1.000.000.000
== Exemplu ==
== Exemplu 1 ==
; Intrare
; Intrare
: 5
: 5
Line 18: Line 19:
: 7 10
: 7 10
; Ieșire
; Ieșire
: Datele sunt introduse correct
: 4
: 4
== Exemplu 2 ==
; Intrare
: 2
: 7 4 2 1
: 4 2
; Ieșire
: Datele nu corespund restricțiilor impuse.
: 7


== Rezolvare ==  
== Rezolvare ==  
=== Rezolvare ver. 1 ===
=== Rezolvare ver. 1 ===
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
# 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):
def validate_input(n, v, a, b):
     if n < 3 or n > 160000:
     if n < 3 or n > 160000 or a < 1 or b > 2000000000 or a > b:
        print("n nu respecta restricțiile 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")
             return False
             return False
    if A < 1 or B > 2000000000 or A > B:
        print("A si B nu respecta restricțiile impuse")
        return False
     return True
     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():
def numara_perechi(n, v, A, B):
    if not valideaza_datele(n, v, A, B):
        return "Datele nu corespund restricțiilor impuse."
    numar_perechi = 0
    for i in range(n - 1):
        for j in range(i + 1, n):
            suma = v[i] + v[j]
            if A <= suma <= B:
                numar_perechi += 1
    return numar_perechi
 
if __name__ == "__main__":
     n = int(input())
     n = int(input())
     v = list(map(int, input().split()))
     v = list(map(int, input().split()))
     A, B = 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__':
     rezultat = numara_perechi(n, v, A, B)
     n, v, A, B = read_input()
    print(numar_perechi(n, v, A, B))


    if isinstance(rezultat, str):
        print(rezultat)
    else:
        print("Datele sunt introduse corect.")
        print(rezultat)




if name == 'main':
main()
</syntaxhighlight>
</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.

Latest revision as of 19:22, 14 May 2023

Sursa: 4265 - perechiAb


Cerinţa[edit | edit source]

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[edit | edit source]

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[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou va afișa pe ecran numărul de perechi care îndeplinesc condițiile cerute., reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".

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

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

Exemplu 1[edit | edit source]

Intrare
5
1 2 3 4 5
7 10
Ieșire
Datele sunt introduse correct
4

Exemplu 2[edit | edit source]

Intrare
2
7 4 2 1
4 2
Ieșire
Datele nu corespund restricțiilor impuse.
7

Rezolvare[edit | edit source]

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line>

def validate_input(n, v, a, b):

   if n < 3 or n > 160000 or a < 1 or b > 2000000000 or a > b:
       return False
   for i in range(n):
       if v[i] < 1 or v[i] > 1000000000:
           return False
   return True


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

   if not valideaza_datele(n, v, A, B):
       return "Datele nu corespund restricțiilor impuse."
   numar_perechi = 0
   for i in range(n - 1):
       for j in range(i + 1, n):
           suma = v[i] + v[j]
           if A <= suma <= B:
               numar_perechi += 1
   return numar_perechi

if __name__ == "__main__":

   n = int(input())
   v = list(map(int, input().split()))
   A, B = map(int, input().split())
   rezultat = numara_perechi(n, v, A, B)
   if isinstance(rezultat, str):
       print(rezultat)
   else:
       print("Datele sunt introduse corect.")
       print(rezultat)


if name == 'main': main() </syntaxhighlight>

Explicație rezolvare[edit | edit source]

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.