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

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« : Aprilie 12, 2006, 15:50:09 »

Aici puteţi discuta despre problema BMatrix.
Memorat
Marius
Nu mai tace
*****

Karma: 154
Deconectat Deconectat

Mesaje: 572



Vezi Profilul
« Răspunde #1 : Iulie 15, 2006, 09:51:52 »

Ce idei aveti ? (legate de problema Tongue)

 Brick wall
Memorat

Faceti lucrurile simplu: pe cat de simplu posibil, dar nu mai simplu.
u-92
Vizitator
« Răspunde #2 : Iulie 15, 2006, 10:51:51 »

problema e de idee.. vezi cum poti pune cele 2 dreptunghiuri.. daca vrei ceva mai consistent cauta in "task and solutions" de la ioi2005
Memorat
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #3 : Iulie 15, 2006, 11:04:43 »

Cele doua dreptunghiuri care nu se suprapun vor putea fi separate printr-o linie orizontala sau printr-o linie verticala. Si acum pt fiecare pozitionare posibila a liniei de separare ai ajuns la problema mai simpla de determinare a unui dreptunghi maxim gol. Problema asta este clasica si se poate rezolva in mai multe moduril, cele mai des folosite fiind cel in O(n^3) si O(n^2). Daca esti atent poti face o rezolvare in O(n^3) sau O(n^2) in total.
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #4 : August 13, 2006, 12:01:41 »

Este ceva deosebit la testul 19?  Brick wall [iau WA]. [Peste tot in problema folosesc longint si matricile le-am indexat de la 0..300].
Cred ca trebuie sa fie altceva.  Think
Memorat

Am zis Mr. Green
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #5 : Februarie 27, 2007, 15:28:18 »

stie vreo cineva care e faza cu testu 9?? e vreun caz particular ceva?? iau 95 cu WA pe acest test si nu inteleg de ce  Brick wall.
Am facut un algoritm care ruleaza in n^3.
« Ultima modificare: Februarie 27, 2007, 16:29:39 de către Savin Tiberiu » Memorat
fireatmyself
Nu mai tace
*****

Karma: 36
Deconectat Deconectat

Mesaje: 492



Vezi Profilul
« Răspunde #6 : Februarie 27, 2007, 18:14:22 »

in:
Cod:
5 12
111110011111
111100111111
111010111011
111110101111
111110111101

6 13
1111111111111
1100101101010
1101011111111
1101101111111
1101001110111
1111111110111

9 14
11111111100111
11111111100111
10101111111111
11011111111111
11111111111111
11111100111111
11101110111111
11010011111111
11111111111011

20 20
11001111011111111011
11001111110111110111
11001101111011101111
11001111111101011111
10001111111110111111
11001111111111111111
11111111111111111101
11111110000111111111
11111111111111111111
11111111111111001111
11111111111111001111
11000000011111111111
11111111111111110111
11000000011111111111
11111111111111111111
11111111111011111111
11110001001000111111
11111111111111110111
11111110001111111111
11111111111111110111

out:
Cod:
6 6 6 
19

sper ca n-am busit ceva  Very Happy
Memorat

Viata e scurta. Daca nu o putem lungi, macar s-o facem lata.
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #7 : Februarie 27, 2007, 18:31:50 »

Am luat 100 dar totusi nu prea inteleg ce era gresit. adik pe testele puse de tine obtineam aceleasi rezultate doar ca am facut o modifiacare care nu afecta codul (dupa parerea mea deloc) si am luat 100. Adica eu pana acum nu am luat in considerare si acoperirea cu un singur dreptunghi.
« Ultima modificare: Februarie 27, 2007, 18:39:09 de către Savin Tiberiu » Memorat
fireatmyself
Nu mai tace
*****

Karma: 36
Deconectat Deconectat

Mesaje: 492



Vezi Profilul
« Răspunde #8 : Februarie 27, 2007, 18:40:18 »

pai nu e bine, pentru ca tu trebuia sa determini aria maxima pe care o acopera exact doua dreptunghiuri, nu cel mult doua dreptunghiuri
« Ultima modificare: Februarie 27, 2007, 18:42:48 de către Bogdan Tataroiu » Memorat

Viata e scurta. Daca nu o putem lungi, macar s-o facem lata.
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #9 : Februarie 27, 2007, 19:04:04 »

tocmai de aia nu inteleg nici eu de ce luam doar 95 pana akuma. Sunteti siguri ca testu 9 e corect??
Memorat
fireatmyself
Nu mai tace
*****

Karma: 36
Deconectat Deconectat

Mesaje: 492



Vezi Profilul
« Răspunde #10 : Februarie 27, 2007, 19:10:30 »

da, suntem siguri. ideea este ca daca exista un singur dreptunghi de 0 (vezi exemplul de mai jos) acesta se poate imparti in doua dreptunghiuri (exista mai multe moduri pentru a o face, dar aria ramane tot cea a dreptunghiului initial). poate nu tratai cum trebuie acest caz.

Cod:
3 5
11111
10001
10001

explicatie: o solutie posibila ar fi sa consideri primul dreptunghi format din casutele (2, 2) si (3, 2), iar al doilea dreptunghi format din casutele (2, 3), (2, 4), (3, 3), respectiv (3, 4). o alta solutie ar fi sa consideri dreptunghiul format din casutele (2, 2), (2, 3), respectiv (2, 4) si dreptunghiul format din casutele (3, 2), (3, 3), respectiv (3, 4). in ambele cazuri raspunsul este 6.
« Ultima modificare: Februarie 27, 2007, 19:16:07 de către Bogdan A. Stoica » Memorat

Viata e scurta. Daca nu o putem lungi, macar s-o facem lata.
savim
Nu mai tace
*****

Karma: 194
Deconectat Deconectat

Mesaje: 333



Vezi Profilul
« Răspunde #11 : Mai 03, 2008, 09:14:25 »

Problema merge O ( N ^ 3)? Am incercat o astfel de dinamica si iau 90p (TLE pe ultimile doua). Si daca nu merge, puteti sa-mi dati un hint pentru O( N ^ 2) ? Eh?
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #12 : Mai 04, 2008, 22:19:00 »

Incearca sa folosesti doar O(N^2) memorie.
Memorat

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

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #13 : Mai 04, 2008, 22:31:21 »

Problema se poate face si in O(N^2). Stii sa faci submatricea de suma maxima in O(N^2)?
Memorat

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

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #14 : Mai 05, 2008, 01:36:00 »

Andrei daca stii sa faci submatricea de suma maxima in O(n^2) atunci poti sa scrii un research paper. Cel mai bun algoritm cunoscut are complexitate putin mai mica decat O(n^3).

Probabil tu te refereai la submatricea maxima plina de 0.
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #15 : Mai 05, 2008, 08:29:10 »

Smile), Da la submatricea maxima plina de 0 ma refeream Tongue.
« Ultima modificare: Mai 05, 2008, 11:55:59 de către Adrian Diaconu » 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 #16 : Mai 05, 2008, 12:09:34 »

Nu, stiu doar O ( N ^ 3). O sa incerc sa optimizez memoria cum a zis Paul, sa vad cat iau. Daca nu merge asa, o sa ma gandesc la O (N ^ 2).

L.E.: Am reusit sa iau suta  Yahoo! , modificand ordinea unor foruri, si micsorand tipul variabilelor. Pana la urma nu a trebuit sa tin ultimele doua linii din dinamica, oricum multumesc de sfaturi!
« Ultima modificare: Mai 05, 2008, 18:04:41 de către Stan Serban Andrei » Memorat
Dastas
Vorbaret
****

Karma: 11
Deconectat Deconectat

Mesaje: 170



Vezi Profilul
« Răspunde #17 : Mai 06, 2008, 13:01:04 »

Eu sunt foarte curios cum se face submatrice maxima plina de zerouri in O(n2)... as fi recunoscator daca ar explica cineva ideea Smile.
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #18 : Mai 06, 2008, 20:04:10 »

Initial calculezi A[i,j] = numarul de 0 consecutivi deasupra pozitiei i, j. Apoi parcurgi linie cu linie matricea si iti propui sa afli cel mai mare dreptunghi plin cu 0 deasupra liniei i (linia curenta). Parcurgi linia de la stanga la dreapta si adaugi valorile A[i,j] intr-o stiva. Cat timp elementul din stiva este mai mare decat elementul curent acesta este scos. Vezi daca varful stivei * (pozitia curenta - pozitia in care a fost varful adaugat in stiva) este mai bun ca solutia si actualizezi. Reiei apoi acelasi algoritm pe linie de la dreapta la stanga si in final vei obtine cel mai bun dreptunghi deasupra liniei i. De mentionat ca cu acest algoritm, nu poti (cel putin nu stiu eu cum) afla cel mai mare dreptunghi cu 0 cu coltul in (i, j).

Ma gandesc dreptunghiul si patratul maxim de 0 sunt dinamici care ar trebui adaugate in arhiva educationala pe viitor. Buru, modifici tu pagina?
Memorat

Am zis Mr. Green
bogdan2412
Echipa infoarena
Nu mai tace
*****

Karma: 410
Deconectat Deconectat

Mesaje: 951



Vezi Profilul
« Răspunde #19 : Octombrie 11, 2009, 14:54:56 »

S-au schimbat o parte din teste de la aceasta problema pentru a pica solutiile incorecte care luau 100 de puncte si s-au reevaluat toate sursele trimise pana acum.
Memorat
APOCALYPTO
Nu mai tace
*****

Karma: 3
Deconectat Deconectat

Mesaje: 250



Vezi Profilul
« Răspunde #20 : Ianuarie 26, 2010, 19:43:26 »

Initial calculezi A[i,j] = numarul de 0 consecutivi deasupra pozitiei i, j. Apoi parcurgi linie cu linie matricea si iti propui sa afli cel mai mare dreptunghi plin cu 0 deasupra liniei i (linia curenta). Parcurgi linia de la stanga la dreapta si adaugi valorile A[i,j] intr-o stiva. Cat timp elementul din stiva este mai mare decat elementul curent acesta este scos. Vezi daca varful stivei * (pozitia curenta - pozitia in care a fost varful adaugat in stiva) este mai bun ca solutia si actualizezi. Reiei apoi acelasi algoritm pe linie de la dreapta la stanga si in final vei obtine cel mai bun dreptunghi deasupra liniei i. De mentionat ca cu acest algoritm, nu poti (cel putin nu stiu eu cum) afla cel mai mare dreptunghi cu 0 cu coltul in (i, j).

Ma gandesc dreptunghiul si patratul maxim de 0 sunt dinamici care ar trebui adaugate in arhiva educationala pe viitor. Buru, modifici tu pagina?
Cine e acesta acesta?
Elementul din varful stivei?
Cum se introduc valori in stiva? Pe parcursul parcurgerii liniei i sau imediat ce trecem la linie noua introducem toate elementele liniei respective in stiva?
Cand  incepem sa parcurgem de la dreapta la stanga linia i se va intampla ceva cu stiva? Elementel vor ramane la fel ca atunci cand am terminat de parcurs de la stanga la dreapta?
Din ce vom obtine cel mai bun dreptunghi de deasupra liniei i? In stiva?

Multumesc anticipat pentru raspunsuri!
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #21 : Ianuarie 26, 2010, 20:47:22 »

Voi detalia mai mult solutia de mai sus pentru ca nu e completa si nici in totalitate corecta.


Calculezi A[i,j] = numarul de 0 consecutivi deasupra pozitiei (i,j). Apoi fixam o linie i si ne propunem sa calculam dreptunghiul de arie maxima plin cu 0 care are latura de jos pe linia i. Pentru a atinge acest scop, vom calcula pentru fiecare coloana j, care este latimea maxima a unui dreptunghi plin cu 0 care are inaltimea A[i,j]. Adica ne dorim mai exact sa calculam acel j' < j maxim astfel incat A[i,j'] < A[i,j] si acel j''>j minim astfel incat A[i,j'']<A[i,j]. Este evident ca daca stim pe j' si j'' baza dreptunghiului de inaltime A[i,j] se intinde intre j'+1 si j''-1, deci latimea dreptunghiului este j''-1-j'. Astfel avem un candidat pentru marirea solutiei curente, de arie A[i,j]*(j''-1-j').

Mai trebuie sa vedem cum putem calcula j' si j'' pentru fiecare j. Mentionez ca j'' se obtine analog cu j', singura diferenta este ca linia i se parcurge de la dreapta la stanga pentru obtinerea lui. Pentru a afla j', vom parcurge coloanele de la stanga la dreapta si vom insera treptat intr-o stiva valorile A[i,j]. Vom mai folosi un vector suplimentar pentru a memora coloana cand a intrat o valoare in stiva. La fiecare pas eliminam varful stivei cat timp acesta este strict mai mare decat A[i,j]-ul curent. In continuare, daca A[i,j] este strict mai mare decat varful stivei, se introduce in stiva. Daca la pasul curent a fost eliminat cel putin un element din stiva, nu se modifica coloana de introducere pentru varful stivei chiar daca il introducem pe A[i,j]. Motivul este ca elementele eliminate au fost cu siguranta mai mari decat A[i,j] si deci dreptunghiul se poate intinde in urma. Altfel (daca nu a fost eliminat nici un element), coloana in care a fost introdus varful stivei se considera a fi j (deoarece coloana anterioara este de o inaltime strict mai mica). Astfel, pentru fiecare pozitie j, j'+1 = coloana pentru care a fost introdus varful stivei.
« Ultima modificare: Ianuarie 26, 2010, 21:00:47 de către Paul-Dan Baltescu » Memorat

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

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #22 : Ianuarie 27, 2010, 12:32:13 »

Solutia prezentata de tine initial este diferita (si mai rapida) de cea cu un post mai sus Tongue. In schimb, este mai usor de inteles corectitudinea algoritmului cu doua parcurgeri.
Memorat

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

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #23 : Ianuarie 27, 2010, 15:09:15 »

Pai, acum cand ma gandesc, solutia de mai sus chiar nu mi se pare corecta (ma refer la fraza "Vezi daca varful stivei * (pozitia curenta - pozitia in care a fost varful adaugat in stiva) este mai bun ca solutia si actualizezi"). De exemplu, nu mi se pare ca acopera cazuri de genul:
Citat
01110
00100
00000
00000


Tu cum faci dintr-o singura parcurgere?
Memorat

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

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #24 : Ianuarie 27, 2010, 15:53:12 »

Fac exact asa cum ai explicat tu. Uite o sursa: http://infoarena.ro/job_detail/312811?action=view-source

Mentin o stiva de perechi (inaltime, pozitie), sortate strict crescator dupa inaltime, care reprezinta candidatii pentru capatul din stanga al dreptunghiului de arie maxima. Pentru pasul i sa spunem ca ai inaltimea h. Vrei sa introduci in stiva. Daca h este mai mare decat varful stivei adaugi perechea (h, i). Altfel, scoti din stiva cat timp inaltimea din varf este mai mare strict decat h. Daca ramai in varf cu o inaltime egala cu h, nu faci nimic. Altfel adaugi perechea (h, j), unde j reprezinta ultima pozitie pe care ai sters-o din varful stivei. Stiva ar functiona astfel pe exemplul dat de tine:

Pasul 1: (4, 1).
Pasul 2: Scoti (4, 1), adaugi (3, 1). Stiva arata astfel: (3, 1).
Pasul 3: Scoti (3, 1), adaugi (2, 1). Stiva arata astfel: (2, 1).
Pasul 4: Adaugi (3, 4). Stiva arata astfel: (2, 1), (3, 4).
Pasul 5: Adaugi (4, 5). Stiva arata astfel: (2, 1), (3, 4), (4, 5).

Verficarile le fac atunci cand scot din stiva. La sfarsit am grija sa golesc de tot stiva, facand verificarile necesare.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
Pagini: [1] 2   În sus
  Imprimă  
 
Schimbă forumul:  

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