← Back to topics
Topic

*** mars ***

m@re_m@re
Ovaj zadatak sam slao 14 puta i bez izuzetaka uvek mi je na sedmom primeru pisalo pogresno resenje pa se pitam da li mogu da dobijem
TEST PRIMER BR.7
drakce
Koji mars je u pitanju?
Ako je mars sa BIH onda negde gresis jer meni su prosli svi test primeri iz prve.
m@re_m@re
Da u pitanju je BHIO
Ma znam ja de negde gresim ali nemam blage veze gde gresim

dimitar
(Po zakonu, svaki kafic mora postaviti svoje cijene tako da je moguce platiti kafu tacnim iznosom novcica, u suprotnom je kafa besplatna)

Ulaz
1 3
F 4

Izlaz
Q

Proveri dali u ovaj slucaj ti ispisuje Q, ja sam tako pogresio i mislim
da je bilo na 7 test
petko
Nije u pitanju Q! Proverio sam ja i Q je resenje SAMO 3. test primera
Verovatno je u pitanju neka glupa greska......
drakce
Zadatak je potpuno isti kao i Z-bankar, sa razlikom sto ovde imas stampu novcica. Da li stampas u odgovarajucem formatu? Trazi se resenje sa najvecom novcanicom kod vise resenja.
tijanakg
A meni ne prolazi samo 3. test primer. Da li neko zna kako tachno on glasi?
boba5551
Nego Tijana, ja imam jedno zanimljivo pitanje za tebe. Zašto tako lepa devojka kao ti, toliko vremena provodi za tastaturom i monitorom???
Verovala ili ne, ali u poslednjoj reèenici se krije i odgovor na tvoje pitanje.
m@re_m@re
Ma naravno da stampam tako, ovo se razlikuje od z bankara jer tamo ima
if optimum[i]>optimum[i-a[j]]+1 then optimum[i]:=optimum[i-a[j]]+1
a ovde je optimum[i]>=optimum[i-a[j]]+1 then optimum[i]:=optimum[i-a[j]]+1

(optimum[i] je najmanji broj novcica za isplacivanje sume od i Quakla)
dimitar
Pa, ni je bas tako, tuku:

if (optimum[i] > optimum[i-a[j]] + 1) or
((optimum[i] = optimum[i-a[j]] + 1) and (a[j] > a[c[i]])) then begin
optimum[i]:= optimum[i-a[j]] + 1;
c[i]:= j;
end;
m@re_m@re
Ma imam to nego me mrzelo da kucam kod mene je u potpunosti ovako

for i:=1 to n do
for j:=1 to m do
if a[i]<=j then begin
if optimum[i]>=optimum[i-a[j]]+1 then
if optimum[i]=optimum[i-a[j]]+1 then begin if b[i]<j then b[i]:=j end
else b[i]:=j
optimum[i]:=optimum[i-a[j]] + 1
end;

Inace ja sortiram novcice tako da je dovoljno uporediti indexe, tako da ako malo bolje pogledas nema razlike zimedju toga sto si ti napisao i ovoga...
m@re_m@re
E GRESKA NIJE TAKO NEGO OVAKO

for i:=1 to m do
for j:=1 to n do
if a[j]<=i then
if opt[i]>=opt[i-a[j]] + 1 then begin
if opt[i]=opt[i-a[j]] + 1 then begin if b[i]<j then b[i]:=j end
else b[i]:=j;
opt[i]:=opt[i-a[j]] + 1;

end;
dimitar
Epa vidi ti imas gresku u tvom kodu
Probaj so mojot kod, ili sporedi gi pa ke uocis gde ti je gresku
tijanakg
Ja reshila, hvala.
Za Bobu: Odgovor je - Ko razume, shvatice.
boba5551
Ne shvatam. Šta ko razume shvatiæe?
m@re_m@re
Ja bih molio Bobu i Tijanu da se ne muvaju u mojoj temi otvorite svoju temu (ili ako vam je bas toliko milo ja cu da vam otvorim) pa se tamo intimizirajte :/

Za dimitra
Ma bre i tako sam otkucao kao i ti i opet nece evo ceo moj kod pa ako te ne mrzi pogledaj

var opt, b, d:array [0..15000] of integer;
a:array [1..20] of integer;
c:array [1..20] of char;
l, n, m, i, j, p:integer;
s:string[10];
z:char;
*
*
begin
_ readln(n, m);
__ for i:=1 to n do begin
___ readln(s);
___c[i]:=s[1];
___ a[i]:=0;
___ for j:=3 to length(s) do a[i]:=10*a[i]+(ord(s[j])-48)
__ end;
*
_ for i:=0 to 15000 do b[i]:=0;

_ for i:=1 to 15000 do opt[i]:=30000;
_opt[0]:=0;


_for i:=1 to m do
__ for j:=1 to n do
___ if a[j]<=i then
____ if (opt[i]>opt[i-a[j]] + 1) or
____ ((opt[i]=opt[i-a[j]] + 1) and (a[b[i]]<a[j]))
____ then begin
_____ opt[i]:=opt[i-a[j]] + 1;
_____ b[i]:=j
*
___ end;
*
_ if opt[m]=30000 then writeln('Q')
_ else begin
__ l:=m;
__for i:=opt[m] downto 1 do begin
___ write(c[b[l]]);
___ l:=l-a[b[l]];
__ end;
_ end;
end.
m@re_m@re
To je poslednja poslata verzija inace imalo je tu i raznih sortova i tako to ali mislim da sortovi nisu problem
boba5551
Kakvi su ovo ljudi danas, pa ne smes ni lepo da pitas, a da te neko ne kritikuje. Cak i ako das kompliment, ne budes dobar :-(
rajkon
Poenta teme nije prazan razgovor (idi na krstaricu:), vec da se choveku pomogne oko zadatka ...
dimitar
c:array [1..20] of char;
treba da bude od tip string (naravno, treba da prisposobis
citanje), evo kako sam ja to uradio:

for i:=1 to n do begin
c[i]:= '';
read (z);
while z <> ' ' do begin
c[i]:= c[i] + z;
read (z);
end;
readln (a[i]);
end;

isto promeni sve sto je integer u longint, i 30000 sa 100000
sidejan
Ma dobro je i da se muvaju (samo napred :) hehe) bar se nesto desava na ovom forumu ... bas je malo ljudi ukljuceno i interesuje se :( smrc smrc
m@re_m@re
Ne mislim da je od presudne vaznosti da li su mi oznake string ili je to niz charova uostalom, a i ono za 100000, iako je 30000 opet je dovoljno ne moze da se stigne
m@re_m@re
JA BIH SAMO JOS JEDNOM ZAMOLIO ADMINA DA MI DA SEDMI TEST PRIMER OVOG ZADATKA
dimitar
pa ne znam, ja sam sve to smenio u tvom programu, i on je proradio
na svi testovi.
Izgleda da ovo u zadatku ni je tacno:
Svaki red pocinje sa jednim velikim ili malim slovom engleske abecede koje predstavlja simbol za odgovarajuci novcic u toj zajednici
dimitar
OK, to sa string ni je potrebno, znaci samo napravi pri citanje ovako:

for i:=1 to n do
readln(c[i], a[i]);

to je sve
m@re_m@re
Cekaj, cekaj, sta si tacno izmenio, samo unos podataka...
m@re_m@re
NE MOGU DA VERUJEM, UNOS PODATAKA MI NIJE BIO TACAN MA NEK SE NOSI U....ALO BOBO, NASTAVI BRATE STA SI KRENUO :D
adminModerator
Izvini sto nisam poslao test primer, ali sam bio stvarno prezauzet.. i josh uvek sam... Uostalom, mislim da si izvukao veliku poentu iz svega ovoga, .. ma koliko mala i glupa bila greska!

Pozdrav,
Z
boba5551
Rajko, zar i drug iz odeljenja da me kritikuje.
Sidejan, hvala na podrsci!!!