1865 - Summit

From Bitnami MediaWiki

Cerința[edit | edit source]

Se dă un şir x format din n numere naturale nenule. Pentru fiecare element xi din şir să se verifice dacă există un număr k astfel încât elementul xi să fie egal cu suma primelor k elemente din şir.

Date de intrare[edit | edit source]

Fișierul de intrare summitIN.txt conține pe prima linie numărul n, iar pe a doua linie n numere naturale separate prin spații.

Date de ieșire[edit | edit source]

Fișierul de ieșire summitOUT.txt va conține pe linia i valoarea k dacă elementul xi este egal cu suma primelor k elemente din şir, sau 0 în caz contrar, pentru fiecare i de la 1 la n.

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

  • 2 ≤ n ≤ 1.000.000
  • numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 2.000.000.000

Exemplul 1[edit | edit source]

summitIN.txt

3
1 2 3

summitOUT.txt

1
0
2

Exemplul 2[edit | edit source]

summitIN.txt

1
1

Numerele introduse nu respectă restricțiile.

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def verifica_restrictii(n, nums):

   return 2 <= n <= 1000000 and all(0 < x < 2000000000 for x in nums)

def verifica_summit(n, nums):

   suma_partiala = [0]  # Lista pentru suma parțială, începând cu 0
   for i in range(n):
       suma_partiala.append(suma_partiala[-1] + nums[i])
   rezultate = []
   for i in range(n):
       k = 0
       while k < n and suma_partiala[k] < nums[i]:
           k += 1
       if k < n and suma_partiala[k] == nums[i]:
           rezultate.append(k)
       else:
           rezultate.append(0)
   return rezultate

def main():

   with open("summitIN.txt", "r") as f:
       n = int(f.readline())
       nums = list(map(int, f.readline().split()))
   if verifica_restrictii(n, nums):
       rezultate = verifica_summit(n, nums)
       with open("summitOUT.txt", "w") as f:
           for rez in rezultate:
               f.write(str(rez) + "\n")
   else:
       print("Numerele introduse nu respectă restricțiile.")

if __name__ == "__main__":

   main()

</syntaxhighlight>