0300 - SumaInSecv: Diferență între versiuni

De la Universitas MediaWiki
(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...)
(Nicio diferență)

Versiunea de la data 21 martie 2023 21:49

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

# 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)