Afişează mesaje
Pagini: [1]
1  infoarena - concursuri, probleme, evaluator, articole / Arhiva ACM / Răspuns: 004 Progresie : Decembrie 14, 2013, 18:46:45
Ce se intampla de la problema asta toata lumea are 0 puncte? Puteti sa puneti mai multe teste sau sa dati niste hint-uri? Devine frustrant.
2  infoarena - concursuri, probleme, evaluator, articole / Algoritmiada 2010 / Răspuns: Feedback Runda 3 : Februarie 22, 2010, 21:45:10
Niste indicatii de rezolvare / solutii oficiale, ceva de genul vor fi postate?
Avand in vedere ca problemele de la aceasta runda au avut un grad mare de dificultate cred ca ar prinde bine putin ajutor Smile
3  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 666 2Numere : Aprilie 02, 2009, 14:51:00
pentru ultimele trei teste trebuie facut un greedy? in testele oficiale de la baraj, la ultimele trei minimul format cu cifrele comune de pe cele doua randuri si restul de cifre de pe primul rand este mai mic decat maximul format cu cifrele comune de pe cele doua randuri si restul de cifre de pe al doilea rand (diferenta lor fiind <0) si necesita o reformare a celor doua numere pe baza altor criterii Smile...
4  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 187 Ecuatii : Martie 29, 2009, 21:54:25
voi ce metoda ati folosit? ca eu memorez -a1*x1^3-a2*x2^3 intr-un vector de 10000 lungime, apoi sortez vectorul cu quicksort, generez celelalte 3 necunoscute si pentru fiecare a3*x3^+a4*x4^3+a5*x5^3 caut in vector folosind cautarea binara, daca gasesc incrementez numarul solutilor... dar nu inteleg, pe free pascal imi dau tot felul de erori cand rulez programul si pe evaluator imi tot da TLE, iar dupa cateva modificari ale tipurilor variabilelor mai iau cate 10 puncte, apoi iarasi WA peste tot... nu mai inteleg nimic  Brick wall M-am uitat in solutia oficiala si exact aceeasi metoda o recomanda si ei Smile... help, please...
5  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 006 Factorial : Martie 24, 2009, 22:03:51
Cod:
var a,b,stop,c,e,n,p:int64;
function f(c:int64):int64;
var fact:int64;
begin
fact:=1;
e:=0;
while c div fact<>0 do
begin
fact:=fact*5;
if c div fact=0 then
break;
e:=e+c div fact;
end;
f:=e;
end;
begin
assign (input,'fact.in');
reset (input);
read (input,p);
close (input);
if p=0 then
begin
assign (output,'fact.out');
rewrite (output);
write (output,1);
close (output);
halt;
end
else
if p<=4 then
begin
assign (output,'fact.out');
rewrite (output);
write (output,p*5);
close (output);
halt;
end;
a:=0; b:=p*5; stop:=0;
while a<=b do
begin
c:=(a+b-5) div 2;
if f(c)<p then
a:=c+1
else
if f(c)>p then
b:=c-1
else
begin
stop:=p; a:=b+1;
end;
end;
assign (output,'fact.out');
rewrite (output);
if stop<>0 then
if c mod 10=5 then
write (output,c)
else write (output,c-(c mod 10 - 5))
else
write (output,-1);
close (output);
end.
...Ma poate ajuta cineva cu vreun caz special, indicatie, orice pliz Smile Chiar nu pot sa-mi dau seama de ce iau doar 55 de puncte  Eh? raman dator...
6  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 006 Factorial : Februarie 04, 2009, 00:14:18
Ideea parea foarte ok... daca intreaga problema putea fi restransa la o formula era exceptional... dar nu este, mi-am dat seama dupa mult trial and error ce si cum.
5^13 este ultima putere a lui 5 care incape intr-un integer (4 byte int)
MACAR ca aproximatie bunicica ar putea fi folosita formula... am facut teste si greseste pentru numere mari undeva cam cu 8-9%, deci de la aproximatie spre numar se poate apela la un algoritm simplu de adunari repetate (sau fie... si cautare binara)
Pai imbunatatind metoda ta intr-un fel am reusit sa iau 10 puncte, iar cu alogrimul meu intial (ce foloseste o alta metoda) am obtinut 25 de puncte... sincer nu imi dau seama din ce cauza, deoarece cel care foloseste formula e mult mai eficient, insa la unele teste imi da Raspuns Incorect. 
 
Cod:
var i,p:longint;    a:array[1..100000000] of longint;
    f:text;
begin
assign (f,'fact.in');
reset (f);
readln (f,p);
close (f);
if p=0 then
begin
assign (f,'fact.out');
rewrite (f);
writeln (f,1);
close(f);
end
else
begin
if p<=5 then
begin
assign (f,'fact.out');
rewrite (f);
writeln (f,p*5);
close (f);
end
else
begin
a[1]:=5;
for i:=2 to (p div 5) do
begin
a[i]:=a[i-1]+6;
end;
dec(i);
if p=a[i] then
begin
assign (f,'fact.out');
rewrite (f);
writeln (f,(p-(i-2)-((p*5) div (25*i)))*5);
close (f);
end
else
if p<a[i] then
begin
assign (f,'fact.out');
rewrite (f);
writeln (f,(p+(i-1)-((p*5) div (25*(i-1))))*5);
close (f);
end
else
begin
assign (f,'fact.out');
rewrite (f);
writeln (f,(p-(i-1)-((p*5) div (25*i)))*5);
close (f);
end;
end;
end;
end.

e in stare cam bruta, stiu.. dar am incercat atatea variante, sa obtin un algoritm mai optim decat cel de 25 de puncte, incat mi`a pierit orice chef sa imi mai scurtcircuitez creierii  Smile

Editat de moderator: Era mai simplu si mai elegant sa folosesti tag-ul [ code ], in loc de:
Citat
[ color=green ][ b ][ b ][ b ][ shadow=red,left ]

7  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 006 Factorial : Februarie 03, 2009, 19:36:18
Nu stiu de unde ai scos 5^13, dar am presupus ca ai dreptate. Mi-ar placea totusi sa stiu de unde l-ai scos.

Ideea ta in mare e buna, dar faci greseala fatala sa confunzi p cu n.
Exemplu:
Pentru p=5, algoritmul tau va da 20, dar raspunsul corect este 25.
Pentru p=31, algoritmul tau va da 115, dar raspunsul corect este 125.
Ideea e ca tu numeri cate numere sunt divizile cu n^k pana la numarul respectiv, cand tu defapt ar trebui sa numeri de cate ori apare numarul 5 pana la numarul respectiv.
5 in ecuatia ta va trebui inlocuit cu 6, 25 cu 31 si asa mai departe, conform urmatorului algoritm:
mdea... exista calculator si in windows ce are pana la 12 cifre sau depinde.. chiar mai multe.. cat despre idee este foarte buna, atat doar ca are nevoie doar de puteri ale lui 5 pana la 5^10 si probabil conditiile in caz ca p=5^x, unde x ia valori de la 1 la 10, nu le-a pus bine (prezinta cazuri particulare fata de formula lui) Smile In rest cred ca este bine si chiar in acest moment ma chinuiam sa-l fac sa mearga  Brick wall
Pagini: [1]
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines