Preskoči na glavno vsebino
ACM-moodle
  • Domov
  • Koledar
  • Več
Trenutno uporabljate gostujoči dostop
Prijavite se
ACM-moodle
Domov Koledar
Razširi vse Skrči vse

Bloki

Preskoči Ura

Ura

Server iconStrežniška ura:
  1. rtk2011-PrvaSkupina
  2. 1. naloga
  3. 1. naloga (Vsota)

1. naloga (Vsota)

Zahteve zaključka
Odprto: sobota, 26. marec 2011, 10.15
Rok za oddajo: sobota, 26. marec 2011, 13.15

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>

Trenutno uporabljate gostujoči dostop (Prijavite se)
Povzetek hrambe podatkov
Stran poganja Moodle