0300 - SumaInSecv

From Bitnami MediaWiki
Revision as of 21:49, 21 March 2023 by Flaviu (talk | contribs) (Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/4148/secv10 0300 - SumaInSecv] ---- == Cerinţa == Se dă un vector format din n elemente, numere naturale nenule, şi un număr natural S. Determinaţi, dacă există o secvenţă de elemente din şir cu suma elementelor egală cu S. == Date de intrare == Fişierul de intrare sumainsecv.in conţine pe prima linie numerele n şi S; urmează cele n elemente ale vectorului, dispuse pe mai multe linii şi separate prin spaţii. == Date...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Sursa: 0300 - SumaInSecv


Cerinţa

Se dă un vector format din n elemente, numere naturale nenule, şi un număr natural S. Determinaţi, dacă există o secvenţă de elemente din şir cu suma elementelor egală cu S.


Date de intrare

Fişierul de intrare sumainsecv.in conţine pe prima linie numerele n şi S; urmează cele n elemente ale vectorului, dispuse pe mai multe linii şi separate prin spaţii.


Date de ieșire

Fişierul de ieşire sumainsecv.out va conţine pe prima linie numerele p şi u, separate printr-un spaţiu, reprezentând indicele de început şi de sfârşit al secvenţei determinate.

Restricţii şi precizări

  • 1 ≤ n ≤ 100
  • elementele vectorului vor avea cel mult 4 cifre şi sunt numerotate de la 1 la n
  • dacă vectorul nu conţine nici o secvenţă cu suma elementelor S, se va afişa 0 0
  • dacă şirul conţine mai multe secvenţe cu suma elementelor egală cu S, se va determina cea mai din stânga

Exemplu

Intrare
8 32
12 10 15 7 17 13 19 14
Ieșire
2 4

Rezolvare

Rezolvare ver. 1

<syntaxhighlight lang="python" line>

  1. 0300 - SumaInSecv

n, S = map(int, input().split()) v = [int(input()) for i in range(n)]

sum_window = 0 start_index = 0 max_len = 0 max_start_index = 0

for end_index in range(n):

   sum_window += v[end_index]
   
   while sum_window > S:
       sum_window -= v[start_index]
       start_index += 1
   
   if sum_window == S:
       window_len = end_index - start_index + 1
       if window_len > max_len:
           max_len = window_len
           max_start_index = start_index

if max_len == 0:

   print("0 0")

else:

   max_end_index = max_start_index + max_len - 1
   print(max_start_index + 1, max_end_index + 1)

</syntaxhighlight>