1. naloga (Vsota)

Dano je zaporedje n celih števil, recimo jim a1, a2, ..., an-1, an. Vsa števila so večja od 0.  Poleg tega je dano tudi celo število m. Opiši postopek (algoritem), ki poišče v tem zaporedju najkrajše tako strnjeno podzaporedje, pri katerem je vsota števil v podzaporedju večja od m. Poišče naj torej tak začetni indeks z in dolžino podzaporedja d, da bo az + az+1 + az+2 + ...  + az + d - 2+ az + d - 1 > m
in da bo $d$ čim manjši.

Tvoj postopek naj bo čim bolj učinkovit, tako da bo hitro našel pravi odgovor tudi pri zelo dolgih zaporedjih (takih z nekaj milijoni členov). Bolj učinkovite rešitve dobijo več točk.

Primer: recimo, da imamo zaporedje

5, 6, 5, 6, 9, 9, 9, 6

in m = 24.  Najkrajše strnjeno podzaporedje z vsoto, večjo od m, je dolgo 3 člene: 9 + 9+ 9 = 27, kar je večje od 24. (Do vsote 25 pri tem primeru ne moremo priti z nobenim strnjenim podzaporedjem, do vsote 26 pa sicer lahko, vendar potrebujemo za to vsaj štiri člene: 6 + 5 + 6 + 9 = 26.)  Pravilni rezultat pri tem primeru je torej z = 5, d = 3.

Pri tej nalogi ti ni treba pisati programa ali podprograma v kakšnem konkretnem programskem jeziku (lahko pa, če ti je lažje).  Tvoj postopek sme predpostaviti, da so števila že podana v nekakšni tabeli ali seznamu, na primer takole:

const int n = ...;             /* v C/C++ */
int a[n];

const n = ...;                 { v pascalu }
var a: array [0..n-1] of integer;

int[] a = ...;                 // v javi
int n = a.length;

a = [...]                      # v pythonu
n = len(a)

<PDF>