Nemam ideju za zadatak Voćnjak (Okružno 2013 SŠ - B2)

https://petlja.org/BubbleBee/r/Problems/2013-okruzno-ss-vocnjak

Vracam se na ovaj zadatak vec nekoliko puta i nikako da dobijem neku ideju od koje mogu da pocnem da ga resavam.
Odlucio sam da pogledam u jednom resenju sa takmicenja i ne razumem bas zasto ga je takmicar uradio tako.
Bio bih zahvalan ako neko moze da mi da njihov proces razmisljanja kod ovakvih zadataka.

Takodje, cesto imam problem sa zadataka sa geometrijom (na okruznom). Imate li neke preporuke sto se tice toga? Da vezbam geometrijske zadatke na Codeforces ili mozda negde drugde?

slika

Dato je u zadatku da stabla formiraju krug.
Objasnicu ti pomocu test primera datog u zadatku: (5 sljiva i 8 jabuka)
Znas da 5 sljiva moraju biti jedna uz drugu i mozes da menjas elemente niza kako god hoces(sa 1. na zadnji, sa 2. na 3. itd…kako god zelis). Fora je da pogledas 5 stabla koja su uzastopna i da vidis koliko jabuka treba zameniti sa sljivama i ako bi odlucio da zamenis u tom nizu od 5 elemenata resenje bi ti bilo: (5 - (brojSljiva)) - toliko jabuka moras da zamenis;
I tako trebas da odradis za svako i(pocetno i ti je 0, a zadnje n-1).
Ovde gore na slici sam plavom bojom oznacio kad je i = 0, a zelenom sam oznacio i koje daje tacno resenje.

To i mene zanima.

1 Like

Kasnim, ali hvala puno. Kako bi ti resio problem indexovanja van range kada dodjes do odredjenog elementa? Npr kad bi dosao do zadnjeg elementa i trebas da proveris njega zajedno sa prvim nekoliko.

Ja sam koristio std::string za input drveca, i onda sam na kraj stringa dodao onoliko karakterasa pocetka koliko mi je potrebno za taj primer. Dobio sam 3 TLE, verovatno zbog toga. Da li znas neki bolji nacin?

Ovako:

for(int i = 0;i<n;i++)
{
for(int j = i;j<k+i;j++)
{
if( niz[j%i] == ‘S’)
blablabla
}
}

[j%i]
Koristis moduo i kada ti predje van ranga vratice ti se na pocetak i odatle ce ti indeksirati.
Pretpostavljam da dobijas TLE jer stalno brojis broj sljiva - trebas da na izbrojis samo u prvom segment u i posle kad povecas i za 1, ukoliko je na i+1 sljiva: povecas brojac za sljive i ukoliko je na poziciji gde ti pocinje segment bila sljiva onda smanjis brojac sljiva za 1 jer ispitujes za sledeci segment i to stablo vise ne racunas.