Pagini: [1] 2   În jos
  Imprimă  
Ajutor Subiect: 345 Nasa  (Citit de 11096 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
bogdan2412
Echipa infoarena
Nu mai tace
*****

Karma: 410
Deconectat Deconectat

Mesaje: 951



Vezi Profilul
« : Martie 13, 2007, 20:07:01 »

Aici puteţi discuta despre problema Nasa.
Memorat
cos_min
Nu mai tace
*****

Karma: 48
Deconectat Deconectat

Mesaje: 493


live


Vezi Profilul
« Răspunde #1 : Martie 14, 2007, 19:31:28 »

Am rezolvare O(b*sqrt(b)) iau 20 pcte, restu tle.

Ce complexitate este necesara ??

le. am reusit sa modific si am ajuns pe undeva la O(b), dar nu imi intra in timp totusi ca nu stiu cum sa tin minte daca un element a mai fost sau nu folosit in alg meu.
« Ultima modificare: Martie 15, 2007, 17:19:24 de către Bondane Cosmin Cosi » Memorat

vid...
azotlichid
Echipa infoarena
Nu mai tace
*****

Karma: 50
Deconectat Deconectat

Mesaje: 260



Vezi Profilul
« Răspunde #2 : Martie 15, 2007, 18:25:05 »

B poate lua valori cam mari (2*10^9 e cam mult, nu?). Tine cont de faptul ca diferenta dintre B si A este acceptabila pentru a procesa numai valorile din acel interval. Giggidy, giggidy, gig-gi-dy!
Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #3 : Mai 01, 2007, 14:06:40 »

Eu nu prea imi dau seama cu pot sa optimizez ! Iau doar 20 de puncte.  Brick wall Un hint ceva...?
Memorat
DITzoneC
Nu mai tace
*****

Karma: 301
Deconectat Deconectat

Mesaje: 962



Vezi Profilul
« Răspunde #4 : Mai 02, 2007, 09:46:26 »

Gandeste-te cum se poate adapta ciurul lui Erathostene la aceasta problema.
Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #5 : Mai 02, 2007, 15:27:38 »

Gandeste-te cum se poate adapta ciurul lui Erathostene la aceasta problema.

Cred k am gasit raspunsul! Multumesc! Insa totusi am o nelamurire...pentru asta nu ar trebui un vector de vreo 100 de milioane....? [nu kred k suporta evaluatorul....]   Think


[Later edit] Cred k merge dak aloc dinamic. [faza ku *a=new int[100mil] ] Thumb up
« Ultima modificare: Mai 02, 2007, 15:32:15 de către Marcu Florian » Memorat
astronomy
Nu mai tace
*****

Karma: 204
Deconectat Deconectat

Mesaje: 492



Vezi Profilul
« Răspunde #6 : Mai 02, 2007, 15:38:53 »

Nu conteaza daca aloci dinamic sau static, tot intra in calcul la memorie. Vezi si articolul de pe site despre ciur, acolo ar trebui sa gasesti niste indicatii
Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #7 : Mai 02, 2007, 16:54:47 »

Nu conteaza daca aloci dinamic sau static, tot intra in calcul la memorie.

Asa e! In mod normal asa ar trebui sa se intample. Insa, la problema "2sec" din arhiva, am trimis o sursa cu alocare statica, in care am declarat un vector de tip int de 1 milion si primeam KBS pe toate testele [ceea ce nu e normal, cred], iar apoi am trimis aceeasi sursa, insa am declarat dinamic vectorul [cu new] si ..spre surprinderea mea luasem 100. Nu inteleg de ce s-a intamplat asta... Think

Vezi si articolul de pe site despre ciur, acolo ar trebui sa gasesti niste indicatii

 Nu prea inteleg limbajul ala java...imi dau seama k trebuie sa ma folosesc de forma de restrangere a memoriei folosite [faza cu :un singur bit in locul unui char intreg, aplicat vectorului boolean]! Deci, se restrang dimensiunile vectorului, insa nu inteleg pe ce elemente trebuie sa lucrez cu 1 si 0, pt k din moment ce am restrans dimensiunile trebuie sa restrang si asta... Este clar k in loc de 8 biti pt un singur element folosesc 8 biti pt 8 elemente [sau ceva de genu asta]...insa cum traduc asta in c++?  d'oh!
Memorat
astronomy
Nu mai tace
*****

Karma: 204
Deconectat Deconectat

Mesaje: 492



Vezi Profilul
« Răspunde #8 : Mai 02, 2007, 17:02:09 »

Reprezentarea binara a unui octet e formata dintr-un sir de 8 biti de 0 sau 1. Cum ai spus si tu acum ai nevoie doar de un bit pentru fiecare numar, deci de 8 biti (un octet) pentru fiecare 8 numere. De acum e clar, numerele 0, 1 .. 7 vor corespunde primului octet, numerele 8, 9, 10.. 15 celui de-al doilea octet etc. In general un numar X va corespunde celui de-al (X/8)-lea octet si va fi pe bitul (X%8) al acestui octet.
Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #9 : Februarie 04, 2008, 20:46:23 »

Am facut asemenea ciurului lui eratostene. Am lucrat pe biti, deci ma incadrez in memorie. Cand gasesc un numar i, care e patrat perfect, ii marchez multiplii care se afla pe intervalul [a,b]. La sfarsit, nu fac decat sa numar cate valori de 0 am. Ideea e ca am complexitate cam de O(b*sqrt(b-a)), si iau doar 4 teste..restu tle. Cum as putea sa scot O(b-a)?  Think
Memorat
bogdan2412
Echipa infoarena
Nu mai tace
*****

Karma: 410
Deconectat Deconectat

Mesaje: 951



Vezi Profilul
« Răspunde #10 : Februarie 04, 2008, 21:09:12 »

Numerele patrate perfecte <= B le gasesti in O( sqrt(B) ), iar daca faci ciur, pt fiecare patrat perfect parcurgi un numar din ce in ce mai mic de elemente din intervalul [A, B].. In total parcurgi (B - A) * (1 / (2^2) + 1 / (3^2) + 1 / (4^2) + ... ) elemente care e O(B - A)
« Ultima modificare: Februarie 04, 2008, 21:19:52 de către Bogdan Tataroiu » Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #11 : Februarie 04, 2008, 22:22:56 »

Numerele patrate perfecte <= B le gasesti in O( sqrt(B) ), iar daca faci ciur, pt fiecare patrat perfect parcurgi un numar din ce in ce mai mic de elemente din intervalul [A, B].. In total parcurgi (B - A) * (1 / (2^2) + 1 / (3^2) + 1 / (4^2) + ... ) elemente care e O(B - A)

Am inteles. Eu greseam la gasirea patratelor perfecte...faceam parcurgere + verificare... Acu am reusit sa scot complexitatea ideala, insa iau kill by signal pe vreo 15 teste:| Memorie folosita este int de 100 milioane/32 (cu operatiile pe biti). Sunt aproape sigur ca nu depasesc limitele vreunui vector... Oare care e problema?  Confused
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #12 : Februarie 04, 2008, 23:35:30 »

Cand lucrezi pe biti e indicat sa folosesti unsigned int, iar in loc de 1 << 31 sa ai ((unsigned)1) << 31.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
savim
Nu mai tace
*****

Karma: 194
Deconectat Deconectat

Mesaje: 333



Vezi Profilul
« Răspunde #13 : Martie 04, 2008, 16:35:44 »

Problema merge cel mai bine cu 1<<32, si cu unsigned long, daca puneam 1<<31 imi iesea din timp pe ultimele teste.
Memorat
ciprianf
De-al casei
***

Karma: 11
Deconectat Deconectat

Mesaje: 104



Vezi Profilul
« Răspunde #14 : Iulie 25, 2008, 15:46:25 »

Am rezolvare in O(sqrt B *(B-A)) si iau 60 de pcte cu TLE. Aveti vreo idee unde gresesc?Lucrez pe char de 8 biti.

Cod:
for(i=2;i<=n;i++){ // n=sqrt(b);
z=i*i;
if(z<a)
if(a%z) x=a/z+1;
else x=a/z;
else x=1;
while((long long)z*x<=b){
rezolva(z*x);
x++;
}
}
Fctia rezolv marcheaza z*x care apartine int[a,b]
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #15 : Iulie 25, 2008, 19:23:06 »

Daca stai putin si calculezi, vezi ca e prea mare complexitatea ta pentru 100 de puncte. Ti-a explicat Bogdan mai sus ce trebuie sa faci pentru 100 de puncte.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
ciprianf
De-al casei
***

Karma: 11
Deconectat Deconectat

Mesaje: 104



Vezi Profilul
« Răspunde #16 : Iulie 25, 2008, 21:38:06 »

Am citit postul lui dar nu prea inteleg cum ajunge la complexitate totala finala O(B-A). Adica ia fiecare nr patrat perfect <=B ( O(sqrtB) ) si pt fiecare face ciur => O(sqrtB * (B-A)/(nr patrat perfect)) . Unde gresesc?
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #17 : Iulie 25, 2008, 22:06:15 »

Cred ca tu ai complexitatea corecta O(B-A), dar nu iti dai seama. Din cauza ca patratele perfecte cresc destul de repede, complexitatea finala este O(B-A), nu O(sqrt(B) * (B-A)).
Memorat

Am zis Mr. Green
ciprianf
De-al casei
***

Karma: 11
Deconectat Deconectat

Mesaje: 104



Vezi Profilul
« Răspunde #18 : Iulie 25, 2008, 22:09:22 »

Da, cred ca ai dreptate...dar atunci dc nu iau 100? Ai vreo idee? Folosesc cumva o operatie costisitoare?
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #19 : Iulie 25, 2008, 22:23:18 »

Ai putea optimiza codul de mai sus in cateva locuri.

Cod:
z=i*i;
if(z<a)
if(a%z) x=a/z+1;
else x=a/z;
else x=1;


Aici operatiile '/' si '%' consuma mult timp. Nu cred ca necesita prea multa ingeniozitate o metoda de a scapa de ele.

Cod:
while((long long)z*x<=b){
rezolva(z*x);
x++;
}

Si aici, eu as prefera sa fac adunari decat inmultiri (nu stiu daca se va simti diferenta).
Cat despre functia rezolva nu stiu daca poti imbunatati lucrurile si acolo. Incearca sa eviti '/' si '%' si sa folosesti operatiile pe biti daca e cazul.
Memorat

Am zis Mr. Green
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #20 : Iulie 25, 2008, 23:03:02 »

Da, cred ca ai dreptate...dar atunci dc nu iau 100? Ai vreo idee? Folosesc cumva o operatie costisitoare?

Poti face ciurul doar cu patratele numerelor prime, celelalte numere fiind deja eliminate inainte
Memorat
ciprianf
De-al casei
***

Karma: 11
Deconectat Deconectat

Mesaje: 104



Vezi Profilul
« Răspunde #21 : Iulie 26, 2008, 09:08:12 »

Am reusit, multumesc mult amandurora Yahoo!
Memorat
freak93
Echipa infoarena
Nu mai tace
*****

Karma: 342
Deconectat Deconectat

Mesaje: 819



Vezi Profilul
« Răspunde #22 : Iulie 09, 2009, 08:48:18 »

Ati putea micsora limita de timp la 0.1 secunde pentru ai forta pe oameni sa gaseasca o solutie mai buna Weightlift
Memorat
aladin
Strain


Karma: -2
Deconectat Deconectat

Mesaje: 9



Vezi Profilul
« Răspunde #23 : Iulie 21, 2009, 14:08:11 »

Nu stiu de ce primesc Memory limit exceeded pe ultimele 16 teste...Am declarate static 5 variabile int si un vector de 100 milioane tot int.Trb declarate dinamic? Think poate sa ma ajute cineva?.....Si cat va da pt  1556 100001556? Mie imi da 60792690. Pls HELP!!!ö
Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #24 : Iulie 21, 2009, 14:53:41 »

(100 mil * 4 / 1024) kilobytes = prea mult  Very Happy
Memorat
Pagini: [1] 2   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines