Pagini: 1 2 [3]   În jos
  Imprimă  
Ajutor Subiect: 376 Regiuni  (Citit de 12934 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Bluedrop_demon
Client obisnuit
**

Karma: -3
Deconectat Deconectat

Mesaje: 66



Vezi Profilul
« Răspunde #50 : Martie 30, 2007, 21:44:20 »

Imi bat capul de cateva zile cu problema asta si nu-mi vine nici o idee pentru O(n*m). Am facut O(n*m*log m) si imi sare din timp pe toate testele. Imi dati si mie un hint mai explicit pls?
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #51 : Martie 30, 2007, 21:46:39 »

http://infoarena.ro/preoni-2007/runda-4/solutii  <-- vezi dak gasesti aici vreo ceva util Whistle
Memorat
Bluedrop_demon
Client obisnuit
**

Karma: -3
Deconectat Deconectat

Mesaje: 66



Vezi Profilul
« Răspunde #52 : Martie 30, 2007, 22:04:29 »

Am facut la fel Brick wall Doar ca eu am folosit DEI si din cate stiu recursivitatea e mai inceata  Thumb down dar totusi... o data ce s-au format doua grupuri, trebuie sa vezi daca le imparti iar...

Cum se poate face altfel ?

Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #53 : Martie 30, 2007, 22:20:43 »

nu vad la ce ai avea nevoie asa mare de recursivitate. Pur si simplu parcurgi dreptele si imparti grupurile care le ai deja in functie de acea dreapta.
Memorat
Bluedrop_demon
Client obisnuit
**

Karma: -3
Deconectat Deconectat

Mesaje: 66



Vezi Profilul
« Răspunde #54 : Martie 30, 2007, 22:58:26 »

Pai daca tin minte grupurile ca vectori, ori trebuie sa elimin un element o data ce il pun in alt vector, ceea ce inseamna ca imi iese din timp, ori ii mai adaug o variabila care imi spune daca mai apartine vectorului respectiv sau nu, caz in care sare din memorie.

So... banuiesc ca sunt foarte batut in cap  Brick wall dar tot as vrea sa ma ajute cineva....
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #55 : Martie 31, 2007, 07:16:01 »

pai un vector sa zice pct in care retii punctele si ink un vector gr in care retii grupul din care face parte punctul respectiv. La fiecare pas parcurgi vectorul, imparti grupurile, si sortezi punctele dupa grup. Toate astea se fac in o(n) sau n log n depinzand de sortarea care o aplici.
Memorat
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #56 : Martie 31, 2007, 12:12:47 »

Nu sortezi nimic ... pur si simplu ai niste liste de puncte pe care le imparti dupa drepte si gata.
Memorat
Bluedrop_demon
Client obisnuit
**

Karma: -3
Deconectat Deconectat

Mesaje: 66



Vezi Profilul
« Răspunde #57 : Martie 31, 2007, 12:42:40 »

Sunt perfect de acord. Este chiar solutia care am trimis-o la in timpul concursului. Numai ca acuma iese din memorie si ia numai 10 puncte. Sau poate am gresit eu undeva. Desi nu cred fiindca am scris-o de la capat de doua ori...
Memorat
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #58 : Martie 31, 2007, 13:56:02 »

Pai sunt destui care au rezolvat-o de 100 ...
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #59 : Martie 31, 2007, 14:00:40 »

Cosmin, tu listele alea le tii alocate dinamic banuiesc?? dak am inteles eu cum trebuie algoritmu tau la tine fiecare grup reprezinta o lista alocata dinamic iar la fiecare pas scoti din lista aia anumite elemente pe care le bagi intro lista noua???
Dak asta e ideea pe care ai mers si tu Pandia Gheorghe incearca sa aloci dinamic acele liste, ptr ca altfel nu va intra in memorie.
Sper ca am inteles eu cum trebuie.
Memorat
Bluedrop_demon
Client obisnuit
**

Karma: -3
Deconectat Deconectat

Mesaje: 66



Vezi Profilul
« Răspunde #60 : Martie 31, 2007, 14:17:25 »

Listele sunt alocate dinamic (simplu inlantuite). Asa a fost de prima data. Ultima sursa pe care am trimis-o (care are tot 10p ) nici macar nu mai retine dreptele intr-un vector, ci deschide din nou fisierul de intrare citind cate o dreapta la fiecare pas. Toate testele pe care i le-am dat eu functioneaza perfect.... dar eu nu stiu sa masor memoria. Daca poate cineva sa se uite pe sursa mea pls sa lase un mail unde sa o trimit, sa-mi spuna unde ma poticnesc  Brick wall.

Va multumesc...

P.S. Imi puteti spune Geo
Memorat
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #61 : Martie 31, 2007, 14:39:12 »

m-am uitat. s-ar putea sa fie prea putina memorie pentru pascal ... ai putea sa nu folosesti liste deloc ci 2 vectori de dimensiune 100, si inca 2 vectori care spune unde incepe un grup si unde se termina.
Memorat
Bluedrop_demon
Client obisnuit
**

Karma: -3
Deconectat Deconectat

Mesaje: 66



Vezi Profilul
« Răspunde #62 : Martie 31, 2007, 15:05:29 »

Multumesc mult! Implementarea s-a dovedit de 100p. De altfel, m-am tot gandit cum sa tranform DEI-ul recursiv intr-un algoritm iterativ si nu stiu de ce nu mi-a venit ideea sa tin minte in alti doi vectori unde incepe si unde se termina un grup! Dar oricum, bine ca e ok - invatatura de minte pentru mine sa ma "lafaiesc" in mai putina memorie!
 Ok
Memorat
sima_cotizo
Nu mai tace
*****

Karma: 219
Deconectat Deconectat

Mesaje: 596



Vezi Profilul
« Răspunde #63 : Aprilie 01, 2007, 10:43:54 »

Am trimis o sursa care are doar declararile, citirea... si include <list> <cstdio> si <utility> ... la mine acasa executabilul are vreo 1.1MB(compilat in linux cu aceleasi flaguri ca si voi), dar evaluatorul il lasa sa ruleze... pana la urma dimensiunea executabilului se ia in calcul?
Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #64 : Aprilie 09, 2009, 20:12:13 »

Rezolv in O(N*M) cu hash. Iua 90 de puncte, cu WA. Banuiesc ca e de la coliziuni [ pe care nu le tratez in niciun fel ]. Codul meu e cam asa:

Citat
             hash = 0; P = 1;
      for(j=1;j<=n;++j)
      {
         pz = a[j]*x[ i ] + b[j]*y[ i ] + c[j];
         if(pz<0) hash = (hash + P*'a') % Mod;
         else hash = (hash + P*'b') % Mod;
         P = (P*B)%Mod;
      }
      h[ i ] = hash;

Fac asta pt fiecare punct i. Sortez apoi h[] si numar platourile. Mod = 666013 si B = 26. Imi puteti propune o fctie hash mai buna?  Think Multumesc!

LE: Am luat 100, facand cate doua functii hash diferite pt fiecare vector. Cred totusi ca asta e bulaneala. Cum se trateaza coliziunile ? [renuntand la bulaneli de genul celei curente ]
« Ultima modificare: Aprilie 09, 2009, 20:26:41 de către Marcu Florian » Memorat
retrograd
Client obisnuit
**

Karma: 3
Deconectat Deconectat

Mesaje: 50



Vezi Profilul
« Răspunde #65 : Februarie 27, 2015, 19:22:29 »

Solutia mea are 4 vectori de 1001 componente, plus cateva variabile. Am primit MLE pe toate testele. Schimb din citirea cu stream-uri in citirea standard, MLE pe 9 teste. Poate sa imi explice cineva de ce se intampla asta?

P.S: Matematica de liceu imi spune ca 4*1000 = 4000 var = 16000 bytes = 16 kb. Limita este de 256kb.
Memorat
klamathix
Echipa infoarena
Nu mai tace
*****

Karma: 733
Deconectat Deconectat

Mesaje: 1.216



Vezi Profilul
« Răspunde #66 : Februarie 28, 2015, 01:10:14 »

Matematica de liceu, deși impecabilă, nu ia în calcul faptul că programul mai folosește memorie pe lângă ce declari tu pentru librării și alte lucruri de genul ăsta. S-a mai scris asta pe topic-ul ăsta. Am schimbat oricum limita fiindcă nu cred că mai sunt de actualitate constrângeri din astea obscene la memorie.

Off-topic: Învață STL și folosește containerii de acolo, nu te agita să aloci dinamic.
Memorat
retrograd
Client obisnuit
**

Karma: 3
Deconectat Deconectat

Mesaje: 50



Vezi Profilul
« Răspunde #67 : Februarie 28, 2015, 10:20:53 »

Vectorii aia de care ziceam eu intr-un final i-am alocat dinamic (n+1 componente) si tot acelasi rezultat. Am incercat si stl pentru memorie, initial folosisem map pentru a stoca valorile distince, dar dupa ce am vazut MLE, m-am gandit ca e din cauza campurilor suplimentare pe care le aloca de regula containerii stl. Chiar si asa, 4 vectori mi se pare rezonabil, dpdv al memoriei.
Memorat
retrograd
Client obisnuit
**

Karma: 3
Deconectat Deconectat

Mesaje: 50



Vezi Profilul
« Răspunde #68 : Februarie 28, 2015, 10:25:10 »

Update: Am reuploadat sursa si memoria e in jur de 260-270kb / test. Am citit in sectiunea de comentarii ca si headerele consuma memorie. Ce altceva imi provoaca asa un memory leak? Daca e codul, de ce anume depinde consumul asta? (linii de cod, atribuiri...)
Memorat
depevlad
Strain
*

Karma: 13
Deconectat Deconectat

Mesaje: 32



Vezi Profilul
« Răspunde #69 : August 22, 2015, 16:29:12 »

Eu am facut cu vectori pentru grupele de puncte. Memoria este clar O(n) - am 3000 de shorturi pentru linii, si inca aprox. 3000 pentru puncte. De fiecare data cand introduc un punct intr-o grupa, il scot din alta, deci nu se pot sa se umfle vectorii aia. Totusi, iau MLE pe testul 9.

http://www.infoarena.ro/job_detail/1474698 - aici e borderoul de evaluare.

Poate sa imi spuna cineva de ce iau MLE si ce pot sa fac sa scap de el?

Multumesc anticipat.
Memorat
Pagini: 1 2 [3]   În sus
  Imprimă  
 
Schimbă forumul:  

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