infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva educationala => Subiect creat de: Filip Cristian Buruiana din Decembrie 24, 2008, 12:11:47



Titlul: 024 Deque
Scris de: Filip Cristian Buruiana din Decembrie 24, 2008, 12:11:47
Aici puteti discuta despre problema Deque (http://infoarena.ro/problema/deque).


Titlul: Răspuns: 024 Deque
Scris de: Lazari Mihai din Aprilie 23, 2009, 16:37:49
Am scris o sursa in Pascal (http://infoarena.ro/job_detail/307185?action=view-source (http://infoarena.ro/job_detail/307185?action=view-source)) la aceasta problema si iau doar 60 puncte (TLE la ultimele teste). Pot sa optimizez cumva aceasta sursa sau nu voi reusi sa obtin 100 cu o sursa in Pascal si trebuie sa o scriu in c?  :?


Titlul: Răspuns: 024 Deque
Scris de: Belgun Dimitri Adrian din Aprilie 24, 2009, 21:43:38
din pacate nici o sursa in pascal nu a reusit sa treaca de 60 http://infoarena.ro/monitor?task=deque&compiler=fpc&score_begin=61

din aceleasi motive ca si la RMQ: http://infoarena.ro/forum/index.php?topic=2823.msg32942#msg32942


Titlul: Răspuns: 024 Deque
Scris de: livica din Februarie 06, 2011, 16:27:23
Eu nu pot sa inteleg de ce solutia cu deque are complexitate O(N).
Eu m-am gandit la ce complexitate are algoritmul postat aici cu deque si imi iese o complexitate mai mare decat N, insa in nici un caz N.
Pentru ca se parcurge vectorul A o data cu for si apoi se mai parcurge partial si Deque cu un while in la fiecare iteratie in for.
Deci eu zic ca complexitatea trebuie sa fie mai mare decat N.


Titlul: Răspuns: 024 Deque
Scris de: livica din Februarie 06, 2011, 17:29:26
de exemplu pentru sirul 3 4 1 6 5 cu k=3 se parcurg urmatorii pasii:
se compara:

4 cu 3
1 cu 4
1 cu 3
6 cu 1
5 cu 6
5 cu 1

deci sunt 6 comparari.
Nu rezulta de aici ca complexitatea este 6 (adica N+1) si nu 5 (adica N) pentru exemplul dat?


Titlul: Răspuns: 024 Deque
Scris de: George Marcus din Februarie 06, 2011, 22:30:23
Nu exista O(N+1)... Gandeste-te ca si cum N ar fi un numar mare si astfel 1 se poate neglija. Nici la O(2*N) nu cred ca se scrie 2-ul. Complexitatea nu arata numarul exact de operatii, ci doar intuitiv, sa poti estima numarul lor.


Titlul: Răspuns: 024 Deque
Scris de: Paul-Dan Baltescu din Februarie 06, 2011, 23:45:15
Puteti citi mai multe despre notatia "O" pentru complexitatea timp: aici (http://en.wikipedia.org/wiki/Big_O_notation) si aici (http://ro.wikipedia.org/wiki/Teoria_complexit%C4%83%C8%9Bii), dar se mai gasesc si multe alte articole pe net sau in carti de specialitate (de exemplu in "Introducere in algoritmi" de Cormen, Lieserson, Rivest, Stein).

Pe scurt, o functie g(n) se afla in clasa O(f(n)), daca exista un ordin n0 (numar natural) si o constanta reala c, astfel incat g(n) <= c*f(n) pentru orice n >= n0. O explicatie mai intuitiva e ca se tine cont doar de termenul care creste cel mai repede si constantele nu sunt luate in calcul. Pe link-urile pe care le-am postat mai sus se afla cate un exemplu.


Titlul: Răspuns: 024 Deque
Scris de: livica din Februarie 07, 2011, 13:04:23
Aha...deci ar trebui sa analizez mai lejer complexitatea unui algoritm.
Cat despre cele doua linkuri de pa wikipedia pot sa spun doar ca ma depasesc.
Merci oricum!


Titlul: Răspuns: 024 Deque
Scris de: Alexandru-Iancu Caragicu din Martie 04, 2011, 19:19:46
Cu ce difera sursa mea (http://infoarena.ro/job_detail/546312?action=view-source (http://infoarena.ro/job_detail/546312?action=view-source)) cu cea a lui Rares
(http://infoarena.ro/job_detail/545858?action=view-source (http://infoarena.ro/job_detail/545858?action=view-source)).
Mi-am modificat sursa pana a ajuns aproape identica. Dc iau 25 si el 100?


Titlul: Răspuns: 024 Deque
Scris de: Simoiu Robert din Martie 04, 2011, 19:25:10
Din cauza citirii, tu ai "%i", ceea ce se folosea mai demult in borland ( daca nu ma insel ) . Incearca sa folosesti "%d", si o sa mearga, si la rezultat sa folosesti "%lld", uite aici sursa ta : http://infoarena.ro/job_detail/546327
[LE] Totusi "%i" cred ca mergea, greseala fatala era la rezultat, trebuie "%lld" ..... dar folosesti "%d" mai bine alte dati :D


Titlul: Răspuns: 024 Deque
Scris de: Alexandru-Iancu Caragicu din Martie 06, 2011, 13:11:37
Din cauza citirii, tu ai "%i", ceea ce se folosea mai demult in borland ( daca nu ma insel ) . Incearca sa folosesti "%d", si o sa mearga, si la rezultat sa folosesti "%lld", uite aici sursa ta : http://infoarena.ro/job_detail/546327
[LE] Totusi "%i" cred ca mergea, greseala fatala era la rezultat, trebuie "%lld" ..... dar folosesti "%d" mai bine alte dati :D

Mersi

Dar cred ca fiindca lipsea ll-ul de la format.
http://cplusplus.com/reference/clibrary/cstdio/printf/ (http://cplusplus.com/reference/clibrary/cstdio/printf/)
Scrie acolo d or i pt Signed decimal integer.
Mie-mi place mai mult cu i.

_________________________________
http://infoarena.ro/job_detail/547479 (http://infoarena.ro/job_detail/547479)
http://infoarena.ro/job_detail/547484 (http://infoarena.ro/job_detail/547484)

Se pare ca e mai lent cu %i.
din ce am inteles pana cum
++i mai rapid ca i++
%d mai rapid ca %i
max-ul de mana mai rapid decat cel din stl
streamuri mai rapide pe infoarena, scanf si printf mai rapide pe campion si la olimpiada.


Titlul: Răspuns: 024 Deque
Scris de: Pripoae Teodor Anton din Martie 06, 2011, 15:53:45
Atata timp cat implementezi calumea nu ar trebui sa fie problema detalii de genul.


Titlul: Răspuns: 024 Deque
Scris de: Alexandru-Iancu Caragicu din Martie 06, 2011, 16:34:26
Atata timp cat implementezi calumea nu ar trebui sa fie problema detalii de genul.

http://infoarena.ro/job_detail/547479 (http://infoarena.ro/job_detail/547479)
http://infoarena.ro/job_detail/547484 (http://infoarena.ro/job_detail/547484)
Pe infoarena iau 60 cu %i si 100 cu %d.

Se pare ca unele teste sunt mai rapide cu %i, altele cu %d. Iar unul dintre ele iese de tot din timp la %i.

Au mai fost unele de 90 cu scanf si 100 cu streamuri.
Poate ar trebui marite un pic limitele, nu stiu.
Oricum, daca zici ca la olimpiada nu conteaza e bine. Poate sunt mai mari limitele.


Titlul: Răspuns: 024 Deque
Scris de: Simoiu Robert din Martie 06, 2011, 17:38:09
Faza cu ++i, i++ conteaza de la caz la caz. Daca ai V[++i] sau V[i++] sunt doua lucruri diferite. Si in for, nu conteaza cum il scrii, fiecare cum s-a obisnuit. Streamurile in general merg mai repede, pentru ca sunt mai noi si s-au dezolvata mai bine ca si printf, dar uneori citirea din c face minuni. Si da, "%d" e mai rapid ca si "%i" pentru ca formatul "%d" e mai nou.


Titlul: Răspuns: 024 Deque
Scris de: Alexandru-Iancu Caragicu din Martie 06, 2011, 17:41:59
Faza cu ++i, i++ conteaza de la caz la caz. Daca ai V[++i] sau V[i++] sunt doua lucruri diferite. Si in for, nu conteaza cum il scrii, fiecare cum s-a obisnuit. Streamurile in general merg mai repede, pentru ca sunt mai noi si s-au dezolvata mai bine ca si printf, dar uneori citirea din c face minuni. Si da, "%d" e mai rapid ca si "%i" pentru ca formatul "%d" e mai nou.

Stiu ca v[++i] sau v[i++] sunt doua chestii diferite.


Titlul: Răspuns: 024 Deque
Scris de: Florea Daniel din Noiembrie 11, 2011, 23:54:51
De ce depasesc timpul la sursa asta (http://infoarena.ro/job_detail/632679?action=view-source). Am incercat s-o fac cat mai rapida dar pe pc-ul meu doar citirea la testul 15 imi ia ~1.4 secunde deci nu vad cum ar incapea in timp (am incercat si cu deque din stl si cu vector simplu dar iau la fel).


Titlul: Răspuns: 024 Deque
Scris de: Mihai Bogdan din Noiembrie 12, 2011, 00:01:37
Cineva de pe infoarena zicea ca s-au micsorat timpii la unele probleme. Nu am inteles care e treaba. Dar vad ca nu se mai ia 100 nici la deque, nici la componente tare conexe de o saptamana ...


Titlul: Răspuns: 024 Deque
Scris de: Paul-Dan Baltescu din Noiembrie 12, 2011, 02:46:37
Am crescut limita de timp si am reevaluat problema.


Titlul: Răspuns: 024 Deque
Scris de: Mihai Bogdan din Noiembrie 12, 2011, 03:43:12
Multumesc! :ok:


Titlul: Răspuns: 024 Deque
Scris de: Pirtoaca George Sebastian din Ianuarie 06, 2012, 17:00:46
Si problema http://infoarena.ro/problema/secvdist se rezolva tot cu ajutorul deque.


Titlul: Răspuns: 024 Deque
Scris de: Bodnariuc Dan Alexandru din Aprilie 22, 2012, 21:04:46
hmm iau TLE pe ultimu test cu heapuri dar nustiu cred ca greseste ceva pt ca pe penultimu test am 2sec ..nu pot deschide testul 20 nici cu notepad nici cu word ..


Titlul: Răspuns: 024 Deque
Scris de: Dragos-Alin Rotaru din Aprilie 22, 2012, 21:11:48
Iei TLE pt ca folosesti heapuri si nu deque.
Desi nu e frumos sa storci niste puncte pe o complexitate de O(NlogK) in loc de O(N) poti incerca parsarea numerelor din input.
PS: Nu incurajez obtinerea de puncte multe pe complexitati mai mari decat ar trebui. :)


Titlul: Răspuns: 024 Deque
Scris de: Bodnariuc Dan Alexandru din Aprilie 23, 2012, 01:02:10
 :D nu fac probleme pt puncte  dar doar ziceam ca nu cred ca e de la program o sa incerc sa parsez ,cred ca are ceva mai special ultimu test;
PS:Am fost la oni iti mai amintesti de mine?eu eram ala muci: :rotfl:


Titlul: Răspuns: 024 Deque
Scris de: Dragos-Alin Rotaru din Aprilie 23, 2012, 13:33:03
Da, da, da. Cum sa nu imi amintesc? :))


Titlul: Răspuns: 024 Deque
Scris de: Campeanu Vlad din Noiembrie 05, 2012, 23:22:29
De ce iau sigsegv pe asta ? http://infoarena.ro/job_detail/807054
Bag direct elementul in deque in loc de pozitia lui, in rest e la fel ca sursa de 100.


Titlul: Răspuns: 024 Deque
Scris de: Visan Radu din Noiembrie 05, 2012, 23:29:44
Scapi de kbs daca faci if (i - k >= 1 && deque[front] == a[i - k]), am inversat conditiile. Ramane sa scapi de incorect.


Titlul: Răspuns: 024 Deque
Scris de: Radu-Andrei Szasz din Noiembrie 05, 2012, 23:33:58
Incorectul il iei din cauza ca bagi in deque valoarea elementului si nu pozitia lui. Asta e gresit in conditiile in care 2 elemente se pot repeta, deci tu poti scoate front-ul inainte sa fie cazul. Problema e la linia asta:

if (deque[front] == a[i - k] && i - k >= 1)

PS exemplu mai bun: sa presupunem ca a[i - k] nu e primul element din deque la momentul i, dar va deveni la un moment j, j > i. Astfel nu il vei scoate niciodata din deque.


Titlul: Răspuns: 024 Deque
Scris de: Campeanu Vlad din Noiembrie 06, 2012, 00:00:24
Stiu ca trebuia sa iau incorect tocmai cum ai zis tu, dar nu stiam de ce kbs. Prima data am trimis cu if (deque[front] == a[i - k]) si a doua oara am pus si (i - k >= 1) si tot luam kbs, dar mi-am dat seama acum de ce, degeaba puneam conditia cu i - k >= 1 dupa ca el oricum evalua mai intai a[i - k]. Mersi de explicatii.


Titlul: Răspuns: 024 Deque
Scris de: Denis Mita din August 07, 2013, 18:04:23
O alta problema ce se rezolva cu deque este Secvdist  http://www.infoarena.ro/problema/secvdist


Titlul: Răspuns: 024 Deque
Scris de: Lucian Bicsi din Iunie 19, 2015, 08:02:30
Cred ca testele sau timpul de executie ar trebui putin revizuite. Nu de alta, dar cu heap se poate lua suta fara niciun fel de optimizari :)