0300 - SumaInSecv
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>
- 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>