|
Titlul: 025 Heapuri Scris de: Filip Cristian Buruiana din Decembrie 24, 2008, 13:42:15 Aici puteti discuta despre problema Heapuri (http://infoarena.ro/problema/heapuri).
Titlul: Răspuns: 025 Heapuri Scris de: Popescu Marius din Iulie 09, 2009, 21:36:39 Am doua surse care iau 100 de p si am facut un test care da rezultate diferite pe ambele surse . Ar trebui un pic imbunatatite testele sa vad si eu care e sursa gresita (stiu care e gresita dar ar trebui sa fiu atentionat si de evaluator :-').Daca nu ma uitam la solutia oficiala eram convins ca prima sursa este corecta si puteam sa o busesc rau in timpul concursurilor.
De exemplu pe testu asta prima sursa imi da 6 si a doua 5 si ambele au obtinut 100 de p . http://infoarena.ro/job_detail/330396 http://infoarena.ro/job_detail/330423 Cod: 22 Titlul: Răspuns: 025 Heapuri Scris de: A Andrei din Iulie 10, 2009, 17:08:13 Eu primesc pe sursa mea 5 :D si ma bazez pe acelasi sistem ca la a doua varianta :fighting:
Editat de admin: Foloseste butonul "Modifica" Titlul: Răspuns: 025 Heapuri Scris de: Popescu Marius din Iulie 11, 2009, 10:34:51 Pai 5 este raspunsul corect .. doar am vrut sa atrag atentia ca sunt teste pe care unele surse de 100 de p iau incorect . Adica eu cand aveam o operatie de stergere inlocuiam nodul pe care vreau sa il sterg cu ultimul nod si micsoram numaru de elemente din heap si nu sa construit nici un test in care atunci cand trebuie sa sterg un nod sa fiu nevoit sa fac si upheap .
Titlul: Răspuns: 025 Heapuri Scris de: irimias robert din Noiembrie 18, 2009, 19:08:22 salut, imi poate da cineva o idee de ce sursa asta : http://infoarena.ro/job_detail/365422?action=view-source
la testul 7 unde ar trebui sa afiseze 1 2 3 ... 50001 mie mai afiseaza bine doar pana la aprox 33000 dupa care afiseaza gresit, deci ceea ce nu-nteleg eu cum poate merge corect pana la mai mult de jumatate cu acelasi algoritm si acelasi proces doar cu alte numere in plus in rest ia toate testele corect Titlul: Răspuns: 025 Heapuri Scris de: George Popoiu din Ianuarie 27, 2010, 20:24:18 Imi puteti spune cum ar trebui sa retin ordinea in care sunt introduse valorile?...Ca nu reusesc sa inteleg.
Titlul: Răspuns: 025 Heapuri Scris de: alexandru din Ianuarie 28, 2010, 09:30:19 Pai sa zic ca in v[ i ] ti minte al i-lea element
In Heap[ i ] <- ti minte pozitia elementului din vectorul v, iar in vectorul Position[ i ] ti minte positia elementului i in Heap. Odata ce adaugi/stergi un element in Heap Position se va schimbat, trebuie sa vezi cum :P Titlul: Răspuns: 025 Heapuri Scris de: George Popoiu din Ianuarie 28, 2010, 15:54:37 Iti multumesc mult alexandru ! Chiar am inteles, si iti marturisesc ca daca nu imi explicai tu cred ca mai dura muulta vreme pana aflam ce semnifica acei vectori. =D>
Cred ca ar trebui comentate sursele oficiale de la problemele din arhiva educationala, deoarece unei persoane care nu are alte surse de informare ii este foarte greu (sau imposibil) sa inteleaga o sursa necomentata. Titlul: Răspuns: 025 Heapuri Scris de: alexandru din Ianuarie 28, 2010, 19:40:57 Cred ca ar trebui comentate sursele oficiale de la problemele din arhiva educationala, deoarece unei persoane care nu are alte surse de informare ii este foarte greu (sau imposibil) sa inteleaga o sursa necomentata. Da, n-ar strica niste mici comentarii ale surselor prezentate :)Dar din acelasi motiv presupun ca exista forumul :) Titlul: Răspuns: 025 Heapuri Scris de: Johnsons Babi Minune din Februarie 18, 2010, 01:46:33 ce face assert? e folosit de mai multe ori in sursa oficiala :D va rog ms
Titlul: Răspuns: 025 Heapuri Scris de: alexandru din Februarie 18, 2010, 06:32:45 ce face assert? e folosit de mai multe ori in sursa oficiala :D va rog ms assert( conditie ) - daca conditia este falsa opreste din exectuie programul returnand o valoare de eroare. Este folosit pentru a vedea daca anumite valori respecta limitele impuse :)http://www.cplusplus.com/reference/clibrary/cassert/assert/ Titlul: Răspuns: 025 Heapuri Scris de: Grigore Cezar din Februarie 23, 2010, 20:37:53 Cum as putea rezolva problema folosind priority_queue din stl ? practic cum pot sterge un el x cu priority_queue exista vreo functie ? caci pop imi sterge doar el de prioritate maxima sau se poate folosi si pt a sterge un el oarecare?
Titlul: Răspuns: 025 Heapuri Scris de: Mircea Dima din Februarie 23, 2010, 23:09:37 Priority Queue este o structura de data abstracta (poate fi implementate in mai multe moduri) ce permite doar operatiile push, pop si top.
Deci nu-l poti folosi pentru ce vrei tu. Titlul: Răspuns: 025 Heapuri Scris de: Vlad Tarniceru din Decembrie 18, 2010, 20:14:49 imi spune cineva va rog ce as mai putea optimiza la sursa asta http://infoarena.ro/job_detail/514478?action=view-source (http://infoarena.ro/job_detail/514478?action=view-source)
multumesc Titlul: Răspuns: 025 Heapuri Scris de: George Marcus din Decembrie 19, 2010, 00:11:05 Cred ca e (si mai mult decat probabil) de la modalitatea in care afli "elementul intrat al x-lea in multime".
Tu lucrezi in Heap direct cu valoarea elementelor si strici pozitia lor cronologica. Ceea ce trebuie sa faci e sa memorezi pentru fiecare element din sir pozitia lui in Heap si pentru fiecare element din Heap pozitia lui in sir. Titlul: Răspuns: 025 Heapuri Scris de: Vlad Tarniceru din Decembrie 19, 2010, 09:15:52 da dar cum, nu vad cum ar putea intra in memorie (nr sunt pana la 1000000000) deci nu pot lua un vector in care fac ap[v] = i;
Titlul: Răspuns: 025 Heapuri Scris de: Paul-Dan Baltescu din Decembrie 19, 2010, 11:20:57 Te poti folosi ca informatie intermediara de numarul de ordine al operatiei de insert. Poti introduce aceste valori in heap, sa le compari in functie de valoarea efectiva (pe care o retii in alt vector) si sa mai tii un vector care iti spune pentru fiecare operatie pozitia curenta din heap.
Titlul: Răspuns: 025 Heapuri Scris de: Vlad Tarniceru din Decembrie 19, 2010, 14:16:45 paul, tu vrei sa zici ca iau un vector v[] in care v[ i ] e al i-lea inserat si mai iau un vector t[] in care t[ i ] este pozitia in heap a celui de-al i-lea inserat?
si daca e asa, ca sa fac elementul al 2-lea inserat sa zicem fac: int element = v[2]; int pozitie = t[2]; :? Titlul: Răspuns: 025 Heapuri Scris de: Paul-Dan Baltescu din Decembrie 19, 2010, 15:52:07 M-am exprimat putin prost. Fie faci cum ai scris, dar atunci in heap tii al indicele operatiei la care a fost un element si compari elementele din heap folosindu-te de vectorul v. Fie folosesti vectorul v pe post de heap, dar atunci ca sa accesezi valoarea celui de-al i-lea inserat element, faci element = v[t[2]].
Titlul: Răspuns: 025 Heapuri Scris de: Vlad Tarniceru din Decembrie 19, 2010, 18:45:38 acum am inteles ideea, dar iau 10 puncte cu sursa implementata asa :'(
i-am mai dat teste si ies toate, am facut si cu debuggerul ca sa fiu sigur ca trece bine in t[] si intr-adevar e bine , iar testele de la atasamente sunt cam mari .. as ramane recunoscator celui care m-ar ajuta multumesc Titlul: Răspuns: 025 Heapuri Scris de: George Marcus din Decembrie 19, 2010, 18:51:06 Eu asa am facut:
v[ i ]= elementul intrat al i-lea in multime (deci, practic sirul pe care il citesc) H[ i ]= pozitia in sirul v a elementului de pe pozitia i in heap poz[ i ]= pozitia in heap a elementului de pe poztia i in sirul v v[H[ i ]]= valoarea elementului de pe pozitia i in heap Si de aici lucrezi cu v[H[ i ]] cand compari valorile. Vectorul poz il folosesti ca sa stii instant care element il stergi. Nu poate fi chiar atat de greu daca si eu am inteles :)) Titlul: Răspuns: 025 Heapuri Scris de: Vlad Tarniceru din Decembrie 23, 2010, 11:31:56 mi-a iesit in cele din urma, multumesc tuturor pentru ajutor
totusi, cautarea aceea (sa cauti al i-lea elem intrat) nu se poate face si cu hashing? :) Titlul: Răspuns: 025 Heapuri Scris de: Mircea Dima din Decembrie 23, 2010, 15:08:28 mi-a iesit in cele din urma, multumesc tuturor pentru ajutor totusi, cautarea aceea (sa cauti al i-lea elem intrat) nu se poate face si cu hashing? :) Nu cred ca se poate cu hashing... intr-un hash nu ai o ordine ...sunt random asezate in memorie Titlul: Răspuns: 025 Heapuri Scris de: Posea Elena din Noiembrie 10, 2011, 16:10:08 Salut!
Am tot incercat sa fac o sursa de 100p, dar iau TLE pe ultimele doua teste. sursa mea e aici http://infoarena.ro/job_detail/632209 . Nu-mi dau seama ce ar trebui sa fac s-o imbunatatesc. (am schimbat si citirea, acum e cu freopen, ca in sursa oficiala) Oarecum legat de subiect, intr-o prima versiune a programului heap-ul meu continea struct-uri (deci pentru push si pop, interschimbam obiecte de tip nod). Ia mai mult timp sa interschimbe doua struct-uri decat doua int-uri? sau totul se face la nivel de pointeri si deci ia la fel? Multumesc anticipat! Titlul: Răspuns: 025 Heapuri Scris de: Dragos Oprica din Noiembrie 10, 2011, 17:17:19 E cam stransa limita de timp.
Ca sa iti raspund la intrebare, teoretic lucreaza mai bine cu un tip cunoscut decat cu o structura. Ca sa obtii 100 de puncte poti incerca sa parsezi citirea. :) Titlul: Răspuns: 025 Heapuri Scris de: Posea Elena din Noiembrie 10, 2011, 19:08:19 si sursa oficiala ia tot 40p, tot cu tle pe ultimele doua teste......
Titlul: Răspuns: 025 Heapuri Scris de: Paul-Dan Baltescu din Noiembrie 10, 2011, 19:45:20 Am crescut limita de timp la 0.25s. Nici sursa mea nu se mai incadra in limita de timp.
Titlul: Răspuns: 025 Heapuri Scris de: Posea Elena din Noiembrie 10, 2011, 20:57:05 Mersi! Tare chestia cu reevaluarea surselor deja trimise :yahoo:
@Dragos: am trimis si o sursa cu ideea ta, cu buffer-ul; a scazut fff tare timpul, nu ma asteptam sa fie mai rapid parsatul caracter cu caracter decat cititul direct din fisier; pare o chestie f utila, mersi frumos! Titlul: Răspuns: 025 Heapuri Scris de: Alexandru din Martie 03, 2012, 14:06:29 De ce acest program a blocat monitorul de evaluare?
Titlul: Răspuns: 025 Heapuri Scris de: Rus Alexandru din Martie 10, 2012, 18:27:28 Am incercat o implementare cu 3 vectori dar nu reusesc nicicum sa iau 100... iau incorect pe 6 teste dar toate exemplele care le incerc eu dau bine ](*,)
daca are cineva putin timp sa se uite peste sursa http://infoarena.ro/job_detail/710752?action=view-source (http://infoarena.ro/job_detail/710752?action=view-source) sau stie cateva teste mai cheie pt verificarea greselilor as ramane recunoscator . Multumesc LE am rezolvat...dar schimbarea care am facut'o a fost sa scot conditia de urcare a nodului care il inlocuia pe cel proaspat sters (modul descris de articolul InfoArena), de aici ori eu am busit ceva la implementare, ori testele nu sunt chiar in regula. Titlul: Răspuns: 025 Heapuri Scris de: Petcu Ioan Vlad din Martie 22, 2012, 20:56:20 Daca exista cineva care nu are chef sa implementeze heapuri de mana problema se rezolva
usor cu multiset. Titlul: Răspuns: 025 Heapuri Scris de: Andrei Grigorean din Martie 23, 2012, 01:57:23 Daca exista cineva care nu are chef sa implementeze heapuri de mana problema se rezolva usor cu multiset. Merge la fel de usor si cu priority_queue (http://infoarena.ro/job_detail/656032?action=view-source). Titlul: Răspuns: 025 Heapuri Scris de: Petcu Ioan Vlad din Martie 23, 2012, 09:38:34 Merge la fel de usor si cu priority_queue (http://infoarena.ro/job_detail/656032?action=view-source). Smechera sursa, nu m-am gandit ca nu conteaza ce imi tin in structura atata timp cat afisez ce trebuie... ](*,) Titlul: Răspuns: 025 Heapuri Scris de: Laurentiu Ion din Martie 23, 2012, 11:39:23 Merge la fel de usor si cu priority_queue (http://infoarena.ro/job_detail/656032?action=view-source). Care e defapt un vector implementat cu push_heap si pop_heap. Daca faci cu vector, poti sa accesezi si elementele din interior (dar nu le poti modifica, evident, ca ar trebui sa reechilibreazi), ce poate fi folositor daca vrei sa gasesti un nod in heap :wink: Titlul: Răspuns: 025 Heapuri Scris de: Cazacu Robert din Iunie 15, 2012, 20:22:34 De curiozitate nu ar trebui programul sa ruleze folosind numai 2 vectori?
un vector Heap in care sa retii Heapul si un vector poz in care sa retii pozitile fiecarui element astfel initial punem poz[el(el=nr de elemente)]=el; iar cand schimbam pur si simplu regula paharelor astfel vom obtine un vector de genul v=(4,5,6,3,2) (am dat niste valori complet random) 1 2 3 4 5 asta ne spune ca elementul al 4-lea intrat in vector se afla pe pozitia 1 el intrat la 3-lea se afla pe pozitia 4 and so on Nu sunt sigur de intra in timp tinand cont ca pentru fiecare stergere vom avea nevoie de un for pentru a gasi elementul respectiv dar imi puteti zice de macar o sursa de genul da reultatele corecte? si daca da unde e greseala in sursa: http://infoarena.ro/job_detail/758521 Titlul: Răspuns: 025 Heapuri Scris de: Sorin Rita din Iunie 15, 2012, 21:21:15 Nu m-am uitat foarte atent dar sa zicem ca la un moment dat ai in heap 5 elemente. Apoi il stergi pe cel intrat primu si dupa asta adaugi alt numar. Si acum vrei sa il stergi pe cel intrat al 5-lea. Eu cred ca ai doi candidati. Adica in vectoru tau vor fi doi de 5 pentru ca tu ai doar variabila aia el. Practic numarul intrat al 6-lea cronologic tu il consideri ca al 5-lea din cauza ca decrementezi el cand stergi un element.
Titlul: Răspuns: 025 Heapuri Scris de: Cazacu Robert din Iunie 15, 2012, 22:24:26 Mersi mult, :D imi da 7 teste corecte dar la ultimele 3 imi da TLE cum asi putea sa reduc un pic timpul de rulare la alea 3?
ma gandeam de reusesc cumva sa elimin forul ala pentru poziti ( is doar in cls 9-a deci nu prea realizez dak ala e chiar problema de baza in timp dar asa cred) P.S. urasc faptul ca nu observ chestii cum ai observat tu ](*,) kinda the reason i lost the national loot this year:( Titlul: Răspuns: 025 Heapuri Scris de: Sorin Rita din Iunie 15, 2012, 22:56:01 Poti sa incerci sa schimbi citirea si afisarea. Incearca cu stream-uri poate intra in timp.
Titlul: Răspuns: 025 Heapuri Scris de: Cazacu Robert din Iunie 15, 2012, 23:07:23 la fel:( :'(
Titlul: Răspuns: 025 Heapuri Scris de: George Marcus din Iunie 15, 2012, 23:26:40 Poti face down() si iterativ. Nu iti intra in timp fiindca tu cauti de fiecare data care este elementul intrat al x-lea, ceea ce ar trebui sa faci in O(1).
Titlul: Răspuns: 025 Heapuri Scris de: Cazacu Robert din Iunie 15, 2012, 23:50:22 bun si cum asi putea face cautarea in O(1) fara inca un vector?
Titlul: Răspuns: 025 Heapuri Scris de: Sorin Rita din Iunie 15, 2012, 23:55:20 Nu prea cred ca ai cum fara un vector. Iar iterativ poti sa faci ceva de genu
Cod:
P.S. : vad ca intre timp ti-ai editat mesajul. Presupun ca ai reusit sa faci iterativ Titlul: Răspuns: 025 Heapuri Scris de: Cazacu Robert din Iunie 16, 2012, 00:01:31 da numai ca din pacate acu imi greseste testul 5 si 6
Cod: int s,d,fk; problema e ca nu inteleg de ce dar pur si simplu nu reusesc sa inteleg la ce miar tb sa am 3 vectori si cum sai folosesc (desi am facut multe probleme cu o gramada de vectori nush cum da mno...) Titlul: Răspuns: 025 Heapuri Scris de: Cazacu Robert din Iunie 16, 2012, 00:19:47 Ar fi tare de asi reusi sa realizez ce miam propus la inceput
poz[1]=locatia elementului care a intrat primul in heap and so on si asta mar scuti de cautarea aia and such dar ink tb sa ma gandesc cum sa schimb valorile lui poz ca sa realizez asta Titlul: Răspuns: 025 Heapuri Scris de: Dan H Alexandru din Iulie 08, 2012, 11:17:25 Ca sa faci un max-heap cu priority_queue e suficient sa il declari asa:
Cod: priority_queue< pair<int,int> , vector< pair<int,int> > > H; Titlul: Răspuns: 025 Heapuri Scris de: Dumitru Andrei Georgian din Iulie 08, 2012, 11:55:10 Pentru max heap e suficient
Cod: priority_queue<int> H; Titlul: Răspuns: 025 Heapuri Scris de: Dan H Alexandru din Iulie 11, 2012, 12:33:21 Multumesc. :ok:
Titlul: Răspuns: 025 Heapuri Scris de: Junc Raul Cosmin din Noiembrie 14, 2012, 23:18:58 Diferenta dintre endl la '\n' ii de la 40 la 100 de puncte :eyebrow:
Titlul: Răspuns: 025 Heapuri Scris de: Paul-Dan Baltescu din Noiembrie 15, 2012, 01:03:07 endl forteaza golirea buffer-ului, '\n' nu. Din acest motiv, diferenta e sesizabila.
Titlul: Răspuns: 025 Heapuri Scris de: CHIRILA ADRIAN din Octombrie 18, 2013, 15:07:19 2-se sterge elementul intrat al x-lea in multime, in ordine cronologica.
Exista o operatie speciala de eliminare a unui element dintr-un heap inafara de min/max? ](*,) Titlul: Răspuns: 025 Heapuri Scris de: Alexandru Valeanu din Octombrie 18, 2013, 17:40:45 Poti scoate elementul de pe o pozitie data din heap initializand pozitia aia cu o valoarea mai mica decat radacina, apelezi UpHeap si apoi extragi radacina. Daca vrei sa scoti un element din heap...nu ai cum sa-l cauti in timp logaritmic.
Titlul: Răspuns: 025 Heapuri Scris de: Andronache Riccardo din Februarie 06, 2017, 17:48:14 Asta-i sursa mea...da raspuns corect si merge si super rapid...nu pot sa-mi dau seama de ce imi da Limit exceeded si Killed by signal 11 si 6.. Un sfat m-ar ajuta enorm..
PS: AM FACUT METODA CU HEAP-URI (TATA / FIU / VEC POZITII) Cam care e complexitatea codului meu http://www.infoarena.ro/job_detail/1870456 Cod: #include<bits/stdc++.h> Titlul: Răspuns: 025 Heapuri Scris de: Palaga Vicentiu-Octavian din Aprilie 16, 2017, 10:52:19 Poate sa-mi dea si mie cineva datele de intrare de la testul 2? Am scris 2 programe cu mici diferente intre ele dar care fac in principal aceeasi pasi dar una imi da 30p iar cealalta 100p si vreau sa pot sa le compar si sa deduc diferentele in pasii facuti.
Titlul: Răspuns: 025 Heapuri Scris de: Alexandru Valeanu din Aprilie 16, 2017, 12:50:55 Le poti downloada de aici: http://www.infoarena.ro/problema/heapuri?action=attach-list
Titlul: Răspuns: 025 Heapuri Scris de: Palaga Vicentiu-Octavian din Aprilie 16, 2017, 23:15:54 Multumesc mult pentru teste! cu ele am reusit sa vad unde era eroarea la problema de 30p! :banana:
|