infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Dan-Leonard Crestez din Martie 08, 2004, 20:02:43



Titlul: 014 Secventa
Scris de: Dan-Leonard Crestez din Martie 08, 2004, 20:02:43
Aici puteţi discuta despre problema Secventa (http://infoarena.ro/problema/secventa).


Titlul: 014 Secventa
Scris de: Rus Cristian din Aprilie 27, 2004, 19:08:34
La problema asta, datele de test de la aceasta problema au "k"-ul peste 32000???????? :lol:


Titlul: 014 Secventa
Scris de: Rus Cristian din Aprilie 27, 2004, 19:10:34
Scuze pentru repetitia din mesaju de mai sus da am fost neatent(oricum romana nu este printre punctele mele forte) :oops:


Titlul: Ce mai e de facut?
Scris de: Liceul de informatica Stefan Odobleja , Craiova din Mai 05, 2004, 12:43:06
Am o rezolvare in o(NlogK) care are 2 teste cu timp limita depasit.
Folosesc un algoritm cu min-heap-uri. Ce sa fac?
Pot sa scot o solutie in o(n), si daca da, are cineva o idee de postat?


Titlul: Re: Ce mai e de facut?
Scris de: Mircea Pasoi din Mai 08, 2004, 20:17:46
Citat din mesajul lui: dinu
Am o rezolvare in o(NlogK) care are 2 teste cu timp limita depasit.
Folosesc un algoritm cu min-heap-uri. Ce sa fac?
Pot sa scot o solutie in o(n), si daca da, are cineva o idee de postat?


Poti sa scoti o solutie O(N) (care este necesara pentru punctaj maxim). Daca pornesti de la solutia cu heap-uri, se poate observa ca odata ce inserezi un element in heap, o parte din elemente care existau inainte nu te mai ajuta cu nimic, deci poti inlocui heap-ul cu o alta structura, si cu un pic de analiza amortizata poti sa obtii un algoritm O(N). Acelasi truc a fost anul acesta la baraj la problema "Trans".  :wink:


Titlul: 014 Secventa
Scris de: Liceul de informatica Stefan Odobleja , Craiova din Mai 12, 2004, 12:13:46
Am fost si eu la baraj si in prima zi am facut la celelalte 2 probleme.
La trans, singurul lucru care l-am scis in cod a fost un banc cu Bula
la prezicator. Cine vrea sa-l auda, sa-mi zica. E super. Chiar, despre ce structura vorbeai ?


Titlul: 014 Secventa
Scris de: Mircea Pasoi din Mai 13, 2004, 20:34:12
Citat din mesajul lui: dinu
Am fost si eu la baraj si in prima zi am facut la celelalte 2 probleme.
La trans, singurul lucru care l-am scis in cod a fost un banc cu Bula
la prezicator. Cine vrea sa-l auda, sa-mi zica. E super. Chiar, despre ce structura vorbeai ?


Structura este o stiva.  :) Pentru mai multe detalii, uita-te pe solutia oficiala de la "trans". Intre timp, zi bancu! :)


Titlul: 014 Secventa
Scris de: Vlad Berteanu din Iulie 14, 2005, 09:00:08
Am incercat sa fac si eu problema asta dar imi iese din timp pe ultimile 3 teste. Am rezolvat-o cu stiva de la trans. Am bagat in stiva primele k elemente din sir, le-am sortat qsort si dupa aia am aplicat ideea cu stiva.
 Unde as putea sa optimizez?  :-k  :-k


Titlul: 014 Secventa
Scris de: Mircea Pasoi din Iulie 14, 2005, 09:54:52
Citat din mesajul lui: vladcyb1
Am incercat sa fac si eu problema asta dar imi iese din timp pe ultimile 3 teste. Am rezolvat-o cu stiva de la trans. Am bagat in stiva primele k elemente din sir, le-am sortat qsort si dupa aia am aplicat ideea cu stiva.
 Unde as putea sa optimizez?  :-k  :-k


Pai dupa ce bagi primele k elemente in stiva nu faci nici o sortare..daca le inserezi cum trebuie , stiva trebuie sa ramana sortata in orice moment.


Titlul: 014 Secventa
Scris de: Vlad Berteanu din Iulie 14, 2005, 10:04:09
Nu cred ca m-ai inteles.
 La pasul unu am introdus primele k elemente si le-am sortat.
 Mai departe pentru restul elementelor am aplicat kestia de la stiva. Am luat-o de la coada si am eliminat toate elementele mai mari ca noul numar. (am inserat si binar si tot iese din timp). Minimul l-am scos din capul stivei.


Titlul: 014 Secventa
Scris de: andreit1 din Iulie 14, 2005, 11:03:14
Daca sortezi la pasul unu stiva( qsort, heap-sort...) ai complexitatea O(N*logN) care nu este suficienta pentru a lua 100p. Incearca sa introduci elementele astfel incat stiva sa fie sortata de la inceput.


Titlul: 014 Secventa
Scris de: Vlad Berteanu din Iulie 14, 2005, 11:39:38
Le-am introdus in stiva cu countsort-ul, dar am pus timer pe fiecare procedure in parte si citirea imi ia 0.33 s (pe PIV 2,4Ghz) pt n=500.000.
 Tot TLE iau. Se poate sa fie de la Pascal?


Titlul: 014 Secventa
Scris de: andreit1 din Iulie 14, 2005, 11:47:55
Eu am luat 100 in Pascal folosind countsort in tot programul. M-am chinuit mult sa trec de la 90 la 100, dar se poate.


Titlul: 014 Secventa
Scris de: Vlad Berteanu din Iulie 14, 2005, 12:21:10
:-k Cum ai facut citirea? Pur si simplu citirea imi mananca tot timpul. Restul programului merge O(n). Exista alta modalitate de citire in afara de read ? Yo iau 70 de puncte,nu 90.  ](*,)  ](*,)


Titlul: 014 Secventa
Scris de: andreit1 din Iulie 14, 2005, 12:35:44
Nu cred ca exista alta modalitate mai rapida de a citi decat read. Eu asa luasem 100. Ciudat e ca acum iau din nou 90 pe sursa aia :(


Titlul: 014 Secventa
Scris de: Oltean Dorin din August 09, 2005, 16:31:13
imi da cineva un test in care pf - pi >= k
pf = pozitzia finala
pi = pozitzia intitiala


Titlul: 014 Secventa
Scris de: andreit1 din August 09, 2005, 16:55:22
Ce rost ar avea?


Titlul: 014 Secventa
Scris de: Oltean Dorin din August 09, 2005, 18:08:05
pai as vrea sa imi verifi problema pe testul acela
sau daca nu un test oarecare shi rezultatul  :roll:


Titlul: 014 Secventa
Scris de: andreit1 din August 09, 2005, 18:13:07
Poate m-am exprimat prost... Tinand cont de conditiile din problema ce rost ar avea sa luam o secventa de lungime mai mare de k?
Cat despre teste si rezultate se pot face cu un BF in O(N^2)


Titlul: 014 Secventa
Scris de: cristi8 din August 09, 2005, 18:20:47
Citat din mesajul lui: dOrIn*VXD
imi da cineva un test in care pf - pi >= k
pf = pozitzia finala
pi = pozitzia intitiala


..pai nu prea are cum, ca iti cere "pf" minim (in caz de egalitate la poz. initiala)
..si daca solutia ta ar fi cu pf - pi + 1 > k, atunci ai putea sa micsorezi pf astfel incat pf - pi + 1 = k, si baza nu are cum sa scada (nu introduci elemente care sunt mai mici decat baza deja stabilita (defapt nu introduci elemente deloc))


Titlul: 014 Secventa
Scris de: Oltean Dorin din August 09, 2005, 18:52:29
m-am gandit shi io la asta da am vrut sa ma asigur fara sa inttreb direct  :-$


Titlul: 014 Secventa
Scris de: Oltean Dorin din August 22, 2005, 20:44:43
nu va suparati ca intreb dar scrie la inceputul problemei timpul minim de executie este de 18 sec. eu iau pe un test 27 sec. shi nu da timp depasit pe cand la un test cu 31 sec. am luat TLE

deci timpul de executie minim care este in cele din urma ??? :?:


Titlul: 014 Secventa
Scris de: Vlad Berteanu din August 22, 2005, 23:04:59
Cod:
raport evaluator

ATENTIE! Timpii de executie prezentati aici sunt orientativi! Evaluatorul foloseste un alt timer (mult mai exact) pentru a cronometra sursele compilate. Timpii reali pe configuratia curenta difera in medie cu ~0.015s fata de cei raportati aici. In plus, diferenta de timp nu este constanta pe toate testele. Conform timpilor exprimati aici este chiar posibil ca un test sa depaseasca timpul admis si sa obtina puncte in timp ce alt test ce a rulat mai repede sa obtina TLE.

Timpul de executie minim al problemei este 0.18 secunde cum scrie in enunt !


Titlul: 014 Secventa
Scris de: Oltean Dorin din August 23, 2005, 08:41:16
asta am citit si eu dar de unde pana unde
Citat
0.31 - 0.015 ~ 0,18


Titlul: 014 Secventa
Scris de: Oltean Dorin din August 23, 2005, 08:44:05
si am uitat...
cu prima rezolvare am luat puncte pe un test cu timpul de executie 0.28
si pe a doua rezolvare cu timpul de executie 0.20 am luat TLE


Titlul: 014 Secventa
Scris de: Vlad Berteanu din August 23, 2005, 09:22:39
Hai ma ca nu e nici o problema nicaieri. Evaluatorul merge bine, dar trebuie sa te obisnuiesti cu timpi afisati de el. Optimizeaza programul si nu o sa mai ai nici o problema, o sa ia 100 imediat.  :D


Titlul: 014 Secventa
Scris de: Cristian Strat din August 23, 2005, 10:29:03
Timpii de execuţie sunt orientativi. Te ajută să testezi optimizări şi algoritmi.
Cronometrarea la evaluare funcţionează altfel.
Cât despre diferenţa medie ...


Titlul: 014 Secventa
Scris de: Oltean Dorin din August 23, 2005, 11:05:03
asta este altceva
o cu totul alata explicatie  8) mersi am luat in cele din urma 100 pe aceasi sursa am mai trimis-o de doua ori shi 100 p :D


Titlul: 014 Secventa
Scris de: Gogu Marian din Septembrie 07, 2005, 19:00:59
Cred ca trebuiau facute niste teste putin mai dificile.
Un brute force O(N*K) la care mai adaugi 2-3 linii ia 100 p, deoarece pe cazuri generate random se comporta cam ca un O(N).


Titlul: 014 Secventa
Scris de: vladut.forum din Septembrie 18, 2005, 15:34:12
ok ,care a luat 100 la problema asta sa imi bage si mie niste teste, ca eu iau numa WA...testele nu iau tle ci doar wa, si rog pe careva care a rezolvat problema sa imi lase si mie niste teste ... thanks


Titlul: 014 Secventa
Scris de: Bondane Cosmin din Februarie 07, 2006, 15:39:43
care da nishte exemple care o luat 100 de pcte, k io nush dc iau 0 pcte(tle+wa) pe pr .... plz plz  ](*,)


Titlul: 014 Secventa
Scris de: u-92 din Februarie 07, 2006, 18:53:33
descrie un pic ce faci, acolo e greseala..
p.s.: ai citit posturile de mai sus? sunt cateva idei bune de rezolvare


Titlul: 014 Secventa
Scris de: Sfrent Andrei din Iunie 21, 2006, 13:05:56
 :-k a incercat cineva pana acum divide et impera? oare se poate folosi?


Titlul: Raspuns: 014 Secventa
Scris de: Filip Cristian Buruiana din Iunie 21, 2006, 14:58:39
O abordare divide et impera implica cel putin o complexitate O(N log N), iar daca vrei O(N log N) merge simplu si fara complicatii cu arbori de intervale sau orice alta structura ce executa operatia de minim pe o subsecventa in O(log N). Dar aici limita de timp este f. stransa tocmai pentru a face o departajare intre un O(N) - rezolvarea optima - si un O(N log N). 


Titlul: Raspuns: 014 Secventa
Scris de: johnyd din Noiembrie 20, 2006, 20:20:30
Cum se optimizeaza de la 90 -> 100 p ?
Testul 10 imi da in 0.20 / 0.21 sec
Care e smenul aici?

 Multumesc, daca imi rapsunde cineva!


Titlul: Raspuns: 014 Secventa
Scris de: Tabara Mihai din Noiembrie 20, 2006, 20:58:28
Cum se optimizeaza de la 90 -> 100 p ?
Testul 10 imi da in 0.20 / 0.21 sec
Care e smenul aici?

 Multumesc, daca imi rapsunde cineva!
mai trimite odata solutia ca poate iei 100.Am mai patit faze din astea pe la alte probleme. :-s


Titlul: Raspuns: 014 Secventa
Scris de: Paul-Dan Baltescu din Noiembrie 21, 2006, 08:55:44
Poti sa parsezi citirea, daca chiar nu merge nimic altceva.


Titlul: Raspuns: 014 Secventa
Scris de: Lucian Boca din Februarie 23, 2007, 21:48:54
Iau TLE pe ultimele doua teste pe solutia O(n). Am incercat atat implementarea C, cu citire standard si deque implementat pe vector, cat si C++, cu deque din STL.
Care ar putea fi problema?  :x


Titlul: Raspuns: 014 Secventa
Scris de: Filip Cristian Buruiana din Februarie 24, 2007, 13:10:59
Fa deque in felul urmator:
Cod:
		while (first <= last && Q[first].poz <= i-k) first++;
while (last >= first && Q[last].V >= v[i])   last--;
si incearca sa parsezi citirea. Mie mi-a intrat asa.


Titlul: Raspuns: 014 Secventa
Scris de: Lucian Boca din Februarie 24, 2007, 18:20:20
Asa facusem deque de prima data.
Citirea o fac
Cod:
scanf( "%d", &x );
Si.. TLE pe ultimele 2 teste. Nu vad ce as putea imbunatati, cu exceptia citirii.
Cum se poate face mai eficient?


Titlul: Raspuns: 014 Secventa
Scris de: Airinei Adrian din Februarie 24, 2007, 18:42:28
Faci ceva de genul:
Cod:
int ind, x;
char sir[1024];
fgets(sir, 1024, stdin), x = ind = 0;
for(; sir[ind] >= '0' && sir[ind] <= '9'; ind++)
    x = x*10+(sir[ind]-'0');
Cam asta inseamna sa parsezi citirea, citesti ca un string si apoi transformi in numere. Cand volumul datelor de intrare e foarte mare, se simte diferenta de timp.


Titlul: Raspuns: 014 Secventa
Scris de: Lucian Boca din Februarie 24, 2007, 21:10:22
Da, am parsat citirea si a intrat lejer in timp.
Cu toate astea, o mica obiectie pt problema: limitele de timp ar trebui puse, dupa parerea mea, in asa fel incat un algoritm de complexitate optima sa poata lua max fara sa fie nevoie de citiri "dubioase" :D.
Pareri? :P


Titlul: Raspuns: 014 Secventa
Scris de: Bogdan-Alexandru Stoica din Februarie 24, 2007, 23:37:04
eu n-am parsat citirea si mi-a intrat in timp  :?


Titlul: Răspuns: 014 Secventa
Scris de: Iacob Eduard din Martie 04, 2007, 13:06:48
Unde pot sa gasesc rezolvarea de la problema Trans?


Titlul: Răspuns: 014 Secventa
Scris de: Airinei Adrian din Martie 04, 2007, 16:08:55
O gasesti la sectiunea downloads pe infoarena, oni 2004.


Titlul: Răspuns: 014 Secventa
Scris de: Iacob Eduard din Martie 04, 2007, 23:56:43
Ar trebui mai intai sa ma uit mai atent sa vad despre ce e vorba in trans,sa o inteleg pe aia,si apoi sa fac si problema asta.Dati un indiciu,nu vreau rezolvarea completa.Deci introduc primele k numere in stiva(acolo zicea ca e o coada),si apoi iau pe rand ,restul numerelor le inserez in stiva,si cele care sunt mai mari decat noul numar ,le elimin din coada,sau cum?Am facut asa si nu imi iese.De exemplu am sirul 54321 ,si k=3;
pun primele 3,si stiva arata 543;iau 2-ul,si apoi elimin si 5 si 4 si 3(ca sunt mai mare ca 2),si tot asa pana la sfarsit,cand raman cu 1.Si vad ca nu mia dat raspunsul corect. :-s


Titlul: Răspuns: 014 Secventa
Scris de: David si Goliat din Martie 05, 2007, 21:18:32
  pe exemplul tau , la inceput stiva arata 3 .poate ai uitat sa retii intr-un vector pos[ i ] pozitia elementului i din stiva in sirul initial . Si daca ajuntgi ca i-pos[inc]>k elimini acel element(faci inc++) . La inceput inc=1  


Titlul: Răspuns: 014 Secventa
Scris de: Barca Cristian Mihai din Martie 05, 2007, 23:20:38
Ca sa mearga mai repede tin minte ca eu am setat un bufer de o anumita dimensiune, ca sa se produca citirea mai repede.  :thumbup:  Puteti sa va uitati in sintaxa de C++ la "setbuf" si sa testati si metoda asta.


Titlul: Răspuns: 014 Secventa
Scris de: Iacob Eduard din Martie 06, 2007, 00:38:56
Am inteles cum sta treaba.Acum sa vad de ce primes SIGSEGV  :-k.Pe compilatorul meu(tot Gnu C++),nu primesc eroare,dar nu am Linux(iar signal 11 apare doar pe Linux,din cate stiu).


Titlul: Răspuns: 014 Secventa
Scris de: Iacob Eduard din Martie 06, 2007, 10:33:20
Poate cineva sa imi explice de ce iau SIGSEGV,ca nu ma prind


Titlul: Răspuns: 014 Secventa
Scris de: Bogdan-Alexandru Stoica din Martie 06, 2007, 13:07:15
in 99% din cazuri SIGSECV (Killed by signal 11) semnifica faptul ca ai accesat o zona de memorie pe care nu ai alocat-o inainte. spre exemplu apare daca scri urmatorul cod:
Cod:
int v[100];
printf("%d", v[107]);
aici (http://infoarena.ro/documentatie/evaluator) poti citi (daca n-ai citit deja :P) mai multe despre erorile intoarse de evaluator.
incearca sa-ti genereze teste mari, care sa tinda spre marginea valorica superioara a datelor de intrare si vezi unde crapa :thumbup:


Titlul: Răspuns: 014 Secventa
Scris de: Iacob Eduard din Martie 06, 2007, 13:10:09
Stiu ce am gresit.Credeam ca trebuie sa afisez valoarea cea mai mare.
Cu toate asta tot primesc SIGSEGV(am refacut problema de la 0).Nu cred ca imi trece de limita unui vector,daca era asa trebuia sa imi mearga macar un test,ca doar nu toate au N-ul maxim


Titlul: Răspuns: 014 Secventa
Scris de: Bogdan-Alexandru Stoica din Martie 06, 2007, 13:13:43
nu pot sa te ajut mai mult daca nu vad codul sursa... daca vrei poti sa mi-l trimiti prin mail la [email protected].


Titlul: Răspuns: 014 Secventa
Scris de: Iacob Eduard din Martie 06, 2007, 13:25:49
Am trimis


Titlul: Răspuns: 014 Secventa
Scris de: Radu Padurean din Martie 06, 2007, 15:33:06
Iacob Eduard : In loc sa mai postezi in disperare doar tampenii pe forum, mai bine ai sta si te-ai gandi inainte sa scrii ceva.


Titlul: Răspuns: 014 Secventa
Scris de: Iacob Eduard din Martie 06, 2007, 22:03:03
Si ma rog ce tampenii am scris pe forum?Daca solutia mea este incorecta ,asta nu inseamna ca am scris tampenii,pot sa trimit orice vreau eu ca solutie(aproape),nu am pus pe nimeni sa se uite pe sursa mea.Daca s-a oferit Bogdan A. Stoica(caruia ii multumesc),asta a facut-o din proprie initiativa,nu ca l-am pus eu.Oricum lasa,nu am chef de cearta...


Titlul: Răspuns: 014 Secventa
Scris de: Florian Marcu din Martie 27, 2007, 17:03:52
La problema asta iau Kill by signal pe toate sursele pe care le-am trimis. Si nu stiu din ce cauza... ](*,)ar putea cineva sa mi dea vreun sfat??? :?


Titlul: Răspuns: 014 Secventa
Scris de: Airinei Adrian din Martie 27, 2007, 17:15:11
Citat
Killed by signal: Cea mai frecventa eroare cand ai un bug in program. Cand un program incalca anumite conventii in UNIX acel program primeste un "semnal" care de cele mai multe ori il opreste. Cateva semnale comune:
    * 11(SIGSEGV): Segmentation fault. Asta in 99% din cazuri inseamna ca ai probleme cu accesul la memorie. Ai iesit din limitele unui vector, ai facut stack overflow, etc.
    * 8(SIGFPE): Floating point error. Cauza cel mai frecvent de impartiri la 0.


Titlul: Răspuns: 014 Secventa
Scris de: Pandia Gheorghe din Martie 28, 2007, 22:05:23
O mica intrebare : E posibil sa existe un rezultat cu secventa mai lunga de k ? Mie mi se pare ca e imposibil, adica "minimul" dintr-o secventa mai lunga decat k se gaseste si intr-o secventa de k cu siguranta. Iar cum se cere prima si cea mai scurta, trebuie sa aiba exact k, nu ? ???


Titlul: Răspuns: 014 Secventa
Scris de: Paul-Dan Baltescu din Martie 28, 2007, 22:09:49
Evident :).


Titlul: Răspuns: 014 Secventa
Scris de: Anca Dumitrache din Martie 30, 2007, 10:28:50
am citit un post mai vechi despre o implementare cu deque... oare ar putea cineva sa explice putin ideea? din fragmentul acela de cod nu prea am inteles cum functioneaza..


Titlul: Răspuns: 014 Secventa
Scris de: Savin Tiberiu din Martie 30, 2007, 11:21:10
la fiecare pas bagi un element pe la capatu cozii si le scoti pe cele dinaintea lui de care nu ai nevoie. Apoi vezi de la inceputu cozii elementele care nu mai fac parte din secventa care iti trebuie tie si le scoti. Cam asta ar fi in mare.


Titlul: Răspuns: 014 Secventa
Scris de: Anca Dumitrache din Martie 30, 2007, 11:25:46
merci  :)


Titlul: Răspuns: 014 Secventa
Scris de: Florian Marcu din Martie 31, 2007, 09:02:33
multumesc Airinei Adrian. Insa mi-am dat seama k luam KBS 11 din cauza k nu am scris corect fiserele de intrare si iesire...am corectat sursa si iau doar 80 de puncte...cu TLE pe ultimile doua...stie cineva de 100?? :?


Titlul: Răspuns: 014 Secventa
Scris de: Paul-Dan Baltescu din Martie 31, 2007, 10:25:54
Daca lucrezi in C++ incearca sa folosesti scanf in loc de cin. Poti si sa parsezi citirea.


Titlul: Răspuns: 014 Secventa
Scris de: Pandia Gheorghe din Aprilie 02, 2007, 02:48:11
De aproape o saptamana caut pe net si citesc toate materialele despre stiva/coada deque. Si totusi ceva imi scapa pentru ca nu reusesc deloc sa pricep cum functioneaza. Am ajuns la concluzia ca trebuie construita o stiva la fiecare pas, parcurgand intervalul i-k+1, i cu o variabila j, dar asta ar iesi din timp. Am citit si solutia de la "trans" si mi se pare la fel de ambigua. Ai o coada in care pui si scoti elemente la fiecare pas, si poate fi chiar vida la un moment dat... Si verifici daca primul element e la distanta < k  de i, si daca nu e il elimini si verifici pentru urmatorul... si daca avem o coada goala ?

Ma poate ajuta cineva cu indicatii mai explicite va rog. Daca e prea evident pentru oricine si duc eu lipsa de anumite calitati de intelegere, poate sa-mi trimita mesaj numai mie pls.


Titlul: Răspuns: 014 Secventa
Scris de: Airinei Adrian din Aprilie 02, 2007, 08:51:44
Stiva nu o construiesti la fiecare pas, ea deja e construita cu elementele cu indici mai mici decat i (daca acum esti la pasul i). Mai trebuie sa introduci elementul de la pasul i si sa le scoti pe alea care nu sunt bune. Mai vezi si aici ceva detalii http://infoarena.ro/forum/index.php?topic=1190.0


Titlul: Răspuns: 014 Secventa
Scris de: Pandia Gheorghe din Aprilie 02, 2007, 20:08:07
Ok... cred ca am priceput ce si cum  :ok: ma incurcam pentru ca mi se parea ciudat folosirea unui singur vector dar intr-adevar mai trebuia si unul de pozitie.
Am scris urmatorul algoritm (daca nu e bine ca l-am postat va rog sa-l stergeti) care merge pe exemplu dar imi ia 0 puncte:
Cod:
             ul = 1; pr = 1;
             q = 1;
             nr[1][1] = sir[1];
             nr[1][0] = 1;
             max = -MAXIM;
             for( i=2; i<=n; i++ )
                  {
                       while( ( ul > pr-1 ) && ( sir[i] < nr[ul][1] ) ) ul--;
                       ul++;
                       nr[ul][1] = sir[i];
                       nr[ul][0] = i;
                       while( ( i - nr[pr][0]+1 > k ) && ( pr < ul+1 ) ) pr++;
                       if( ( pr < ul+1 ) && ( nr[pr][1] > max ) )
                           {
                                q = nr[pr][0];
                                max = nr[pr][1];
                           }   
                  }

unde in "sir" am numerele, "nr[ i ][ 1 ]" coada deque si "nr[ i ][ 0 ]" pozitia in sirul initial a elementului i din coada. Imi spuneti si mie ce e in nereg  :sad: ?


Titlul: Răspuns: 014 Secventa
Scris de: Savin Tiberiu din Aprilie 03, 2007, 20:49:11
incearca sa faci un brut force, da-ti teste si vezi unde crapa programul tau. App ai putea observa ca stiva la aceasta problema nu prea are cum sa devina vida ;)


Titlul: Răspuns: 014 Secventa
Scris de: Pandia Gheorghe din Aprilie 03, 2007, 21:00:12
Am intrat de tot in ceata. Pai algoritmul meu, in momentul in care primul element nu e cel mai mic (adica si in exemplu) deja coada devine vida. Deci pana la urma nu am priceput eu cum se face...  :-k am studiat degeaba o sapt... ufff

[LE]
Am implementat stiva "deque" complexitate liniara. M-am prins cum functioneaza numai ca imi iese din timp pe ultimul test. De fapt cateodata imi iese pe ultimele doua teste, alteori doar pe ultimul (daca trimit aceeasi sursa de mai multe ori)... nu este totusi prea stransa limita de timp ?


Titlul: Răspuns: 014 Secventa
Scris de: Savin Tiberiu din Aprilie 04, 2007, 22:38:43
vad ca lucrezi in c++. Incearca sa citesti numerele ca string si apoi sa prelucrezi acel string ptr a ajunge la vectorul de numere. (parsezi citirea)


Titlul: Răspuns: 014 Secventa
Scris de: Gabriel Bitis din Aprilie 04, 2007, 23:01:38
imi explica si mie cineva.. ca unui nestiutor.. cum se face un brut force ? :'( :'(


Titlul: Răspuns: 014 Secventa
Scris de: Lucian Boca din Aprilie 04, 2007, 23:05:59
imi explica si mie cineva.. ca unui nestiutor.. cum se face un brut force ? :'( :'(
Pur si simplu verifici toate secventele posibile :)


Titlul: Răspuns: 014 Secventa
Scris de: Gabriel Bitis din Aprilie 04, 2007, 23:14:47
eu vreau sa aflu in ce consta un program brut force ... sa pot aplica si la alte programe.. de multe ori vreau sa verific programele pe teste mai complicate.. si cand ceream pe forum, mi se spunea sa'mi fac un program brut force...:|.. si .. nu stiam cum :(


Titlul: Răspuns: 014 Secventa
Scris de: Pandia Gheorghe din Aprilie 04, 2007, 23:22:34
Programele brut force sunt rezolvarile "mai clare" ale problemelor. Acele rezolvari mai usor de descoperit dar cu complexitati mult mai mari O(N^3) sau un BackTracking. Bineinteles ca exista si probleme unde aceste rezolvari se incadreaza in timp, dar acolo unde nu se incadreaza, le folosesti doar ca sa-ti faci teste.

Dai un fisier de intrare ( cu random sau cum vrei, in functie de problema ) si apoi lasi programul "brute-force" (rezolvarea cu complexitate mare) sa ruleze pe testul respectiv, chiar daca dureaza foarte mult. Dupa aceea in fisierul de iesire ai o solutie corecta. (Presupunand ca ai implementat si programul brute-force corect)

Astfel poti incerca alte rezolvari cu complexitate mai mica sa vezi cam cum trebuie sa faci sa iti dea aceeasi solutie ca si programul brute-force.


Titlul: Răspuns: 014 Secventa
Scris de: Lucian Boca din Aprilie 04, 2007, 23:23:37
Pai implementezi o rezolvare brute-force (care sigur te conduce la solutia corecta) si faci si un generator de teste. Pentru fiecare test, compari rezultatul obtinut prin brute-force cu rezultatul programului pe care vrei sa il verifici (poti face si un script bash care face chestia asta de 100 de ori, adica genereaza cate un test, ruleaza brute-ul, ruleaza programul tau si compara rezultatele). ;)


Titlul: Răspuns: 014 Secventa
Scris de: Gabriel Bitis din Aprilie 04, 2007, 23:25:54
adik programul brut force ar insemna o rezolvare copilareasca (in sensul k luam totul pas cu pas) , presupunand o complexitate mare...


Titlul: Răspuns: 014 Secventa
Scris de: Pandia Gheorghe din Aprilie 04, 2007, 23:27:21
Dap!  :D


Titlul: Răspuns: 014 Secventa
Scris de: Gabriel Bitis din Aprilie 04, 2007, 23:33:44
o sa trebuiasca sa ma obisnuiesc cu chestii de aastea.... un brut force nu necesita prea mult timp pt rezolvare? /:)


Titlul: Răspuns: 014 Secventa
Scris de: Pandia Gheorghe din Aprilie 04, 2007, 23:39:33
Se poate intampla si asta, dar de cele mai multe ori nu.

De exemplu un backtracking daca il stii bine il scrii in 10 minute maxim si dupa aia poti sta sa astepti 10-20 minute sa rezolve un test. (In acest timp poti lucra la altceva lasandu-l sa ruleze intr-o alta fereastra). Apoi te uiti ce rezultat a dat si vezi daca poti descoperi o formula sau o dinamica... ceva cu complexitate mai mica.

La fel si la grafuri... daca ti se cere un anumit drum pe 100000 de noduri stii ca trebuie sa gasesti un algoritm foarte rapid, dar pana una alta bagi un Roy-Floyd ca poate apare o relatie  :thumbup:


Titlul: Răspuns: 014 Secventa
Scris de: Stefan Istrate din Aprilie 04, 2007, 23:46:10
La fel si la grafuri... daca ti se cere un anumit drum pe 100000 de noduri stii ca trebuie sa gasesti un algoritm foarte rapid, dar pana una alta bagi un Roy-Floyd ca poate apare o relatie  :thumbup:
Ai de gand sa astepti un Roy-Floyd pe 100000 de noduri? :P
P.S. Scuze ca e cam off-topic reply-ul meu.


Titlul: Răspuns: 014 Secventa
Scris de: Pandia Gheorghe din Aprilie 05, 2007, 00:17:30
Tot off topic scuze: Pai vroiam sa subliniez ca intr-adevar poti sa si astepti mult. Dar daca folosesti brute-force uneori nu ai de ales  :wink:


Titlul: Răspuns: 014 Secventa
Scris de: Parfene Narcis din Ianuarie 21, 2009, 22:23:00
Iau 90 de puncte la problema... Nu mai stiu ce sa optimizez...

Fac O(n) cu deque... orice element intra in deque o data si iese cel mult o data, deci cam un milion de operatii. De ce atunci TLE la un test mare? Eu credeam ca pe linux fac in 0.18 sec mai mult de 10 milioane de operatii (nu impartiri). Nu?


Titlul: Răspuns: 014 Secventa
Scris de: Andrei Misarca din Ianuarie 21, 2009, 22:53:34
Incearca sa parsezi citirea


Titlul: Răspuns: 014 Secventa
Scris de: Parfene Narcis din Ianuarie 22, 2009, 07:00:04
Scuze, ce inseamna sa parsez citirea? un exemplu?


Titlul: Răspuns: 014 Secventa
Scris de: gaboru corupt din Ianuarie 22, 2009, 07:13:25
citesti numarul ca sir de caractere, si dupa il transformi in numar propriu-zis.


Titlul: Răspuns: 014 Secventa
Scris de: Parfene Narcis din Ianuarie 22, 2009, 21:53:40
Adica

scanf("%s",sir) ;
x = atoi(sir) ;

prin asta s-ar intelege parsare?


Titlul: Răspuns: 014 Secventa
Scris de: Sima Cotizo din Ianuarie 22, 2009, 22:12:54
Da, dar foloseste fgets() in loc de scanf() si poti incerca si sa implementezi atoi() de mana (cred ca e mai rapid).


Titlul: Răspuns: 014 Secventa
Scris de: BYSorynyos din Martie 26, 2009, 10:32:50
Parsarea chiar face difrenta in problema asta (  :P doar pt cei cu 90p )
Sursa fara parsare http://infoarena.ro/job_detail/288827 (90p)
Sursa cu parsare http://infoarena.ro/job_detail/288886 (100p) detasat  \:D/
Uitati-va numai la timpi (parsare face totul , algoritmul este aceelasi (deque))
Pt cine nu stie sa faca parsare , dati-mi un pm si va ajut !
 Multa bafta !


Titlul: Răspuns: 014 Secventa
Scris de: Antoche Ioana Alexandra din August 17, 2009, 17:15:13
Fara parsare obtin 80p. Cu parsare 50 [pe restul WA]
Cam asa arata parsarea pe care o fac:
Cod:
scanf("%d%d\n",&n,&k);
fgets(s,N,stdin);
for (int i=0; s[i]&&s[i]!=10; ++i)
{
int nr=0;
int semn=1;
if (s[i]=='-')
{
semn=-1;++i;
}
bool ok=false;
while(s[i]>='0'&&s[i]<='9'&&s[i]&&s[i]!=10)
{
nr=nr*10+(s[i]-'0');++i;ok=true;
}
if (ok)
v[++num]=nr*semn;
}
Imi poate spune cineva unde gresesc? pls


Titlul: Răspuns: 014 Secventa
Scris de: Tulpan Narcis din Noiembrie 13, 2010, 14:37:52
 ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,)nu inteleg de ce nu primesc mai mult decat 30 de  puncte am folosit doar  2 structuri repetitive ](*,) ](*,)


Titlul: Răspuns: 014 Secventa
Scris de: Simoiu Robert din Noiembrie 13, 2010, 14:39:29
Problema se face cu ajutorul unui deque (http://infoarena.ro/problema/deque).


Titlul: Răspuns: 014 Secventa
Scris de: Pripoae Teodor Anton din Noiembrie 14, 2010, 02:06:46
Problema se face cu ajutorul unui deque (http://infoarena.ro/problema/deque).

Se face fara deque.


Titlul: Răspuns: 014 Secventa
Scris de: Savin Tiberiu din Noiembrie 14, 2010, 03:28:06
@toni: Esti sigur? Nu stiu ce solutie ai tu dar sunt destul de sigur ca merge si cu deque. De altfel as fi curios cum o faci fara deque.


Titlul: Răspuns: 014 Secventa
Scris de: Pripoae Teodor Anton din Noiembrie 14, 2010, 12:22:08
Da, ai dreptate, se pare ca eu o facusem prost. Aseara m-am uitat pe sursa mea (de prin 2008), si in loc sa scot din deque din dreapta, eu cautam binar pozitia si setam capatul din dreapta acolo. Am crezut ca e o coada cu ceva smen.


Titlul: Răspuns: 014 Secventa
Scris de: Paul-Dan Baltescu din Noiembrie 14, 2010, 14:33:01
1 - 0 la spiderman. :)


Titlul: Răspuns: 014 Secventa
Scris de: Simoiu Robert din Noiembrie 14, 2010, 17:12:36
1 - 0 la spiderman. :)
Nu cred ca asta poate fi tratata ca o "batalie", poate ca el initial a vrut sa ajute, intentia conteaza ;) .


Titlul: Răspuns: 014 Secventa
Scris de: Pripoae Teodor Anton din Noiembrie 14, 2010, 23:49:52
1 - 0 la spiderman. :)

Corect #-o


Titlul: Răspuns: 014 Secventa
Scris de: Valentin Harsan din Decembrie 14, 2010, 18:38:28
af facut o sursa cu deque  COD:

Cod:
#include<iostream>
#include<fstream>
using namespace std;
const int N=500001;
int a,s,smax,dr,st=1,d[N],v[N],n,k;
void stanga (int i) {
while ((i-d[st]>=k) && (v[d[st]]<v[d[st+1]])) {
++st;
}
}

void dreapta (int i) {
while (st<=dr && v[d[dr]]>=v[i]) {
--dr;
}
}

void adauga (int i) {
d[++dr]=i;
}

ifstream aa("secventa.in");
ofstream ss("secventa.out");
int main () {
smax=-10000;
int i;
aa >> n >> k;
for (i=1;i<=n;++i) {
aa >> v[i ];
stanga(i);
dreapta(i);
adauga(i);
if (i>=k && v[d[st]]>smax) {
smax=v[d[st]];
a=i-k+1;
s=i;
}
}
ss << a << " " << s << " " << smax;
return 0;
}

si iau 10 pct. nu inteleg unde am gresit.
ma poate ajuta cineva?

Editat de moderator: foloseste tagurile [ code ] si [ /code ] cand postezi cod. Lasa spatiu intre parantezele drepte si litera i, ca altfel textul ce urmeaza va fi italic.


Titlul: Răspuns: 014 Secventa
Scris de: Paul-Dan Baltescu din Decembrie 14, 2010, 19:16:39
Functia dreapta e problema. Incearca sa citesti mai multe aici (http://infoarena.ro/problema/deque).


Titlul: Răspuns: 014 Secventa
Scris de: Alexandru-Iancu Caragicu din Iulie 18, 2011, 11:55:57
Vre-un exemplu in care solutia nu are lungime k? Pt ca la o solutie ipotetica de lungime mai mare ca k i-ai taia elementele de la sfarsit sa ajunga de lungime k. Astfel ar avea prioritate in fata secventei initiale (are indicele de sfarsit mai mic), iar baza ei nu poate decat sa creasca in urma taierii, deci sa aiba o baza fie egala, fie chiar mai mare.

_______
Mai tarziu:
Da, am luat 100 considerandu-le doar pe cele de lungime k.
80 cu scanf, 100 cu stream-uri


Titlul: Răspuns: 014 Secventa
Scris de: Andrei Geogescu din Decembrie 23, 2011, 20:46:41
Cod:
 

#include<fstream>
using namespace std;
int a[500000],b[500000],maxx=-30001,prim,ultim,p,u;
int main()
{ifstream f("secventa.in");
ofstream h("secventa.out");
int n,i,k,j,z;
f>>n>>z;
for(i=1;i<=n;i++)
f>>a[i];
for(i=1;i<=n;i++)
{j=i-1;
k=0;
while(j>=1&&a[j]>=a[i]&&k<z)
{k++;
j=j-1;}
prim=j+1;
j=i+1;
while(j<=n&&a[j]>=a[i]&&k<z)
{k++;
j=j+1;}
ultim=j-1;
k++;
if(a[i]>maxx&&k>=z)
{maxx=a[i];
p=prim;
u=ultim;}}
h<<p<<" "<<u<<" "<<maxx;
return 0;}


ma poate ajuta cineva...spunandu'mi ce este gresit la aceast algoritm ?
iau doar 10 puncte ,wrong answer pe cele ramase


Titlul: Răspuns: 014 Secventa
Scris de: Mihai Calancea din Decembrie 23, 2011, 21:01:56
Ok, hai sa clarificam niste ground rules. Nu posta cod pentru debug, pentru ca cel mai des nu o sa stea nimeni sa inteleaga ce ai facut. Spune in schimb ce idee ai in spate ca sa verifici daca e corecta, iar implementarea testeaza-ti-o singur, fiindca te ajuta foarte mult.

De-asemenea, ar fi bine ca sursa sa nu arate ca o poezie de-a lui Blaga, identeaza si tu pe-acolo, mai lasa niste spatii, tot pe tine te ajuta. Nu stiu cum dovedesti sa potrivesti macar acoladele in forma asta. Best of luck :)


Titlul: Răspuns: 014 Secventa
Scris de: Visan Radu din Aprilie 28, 2012, 14:19:46
Nu stiu ce n-am facut bine, dar deque + citire parsata = 70 de pct  ???
Imi poate spune si mie cineva ce pot sa mai optimizez? Teoretic complexitatea asta ar trebui sa intre in timp.


http://infoarena.ro/job_detail/742104?action=view-source


Titlul: Răspuns: 014 Secventa
Scris de: Mihai Calancea din Aprilie 28, 2012, 15:20:23
Nu prea e parsare ce faci acolo, fiindca citesti caracter cu caracter. Citeste tot randul cu fgets sau fread.


Titlul: Răspuns: 014 Secventa
Scris de: Visan Radu din Aprilie 28, 2012, 15:36:47
Incercasem initial cu cin.getline si strtok, luam 60 de pct.  http://infoarena.ro/job_detail/742096?action=view-source


O sa incerc si cu fgets/fread si revin cu rezultatul


LE: 100 cu fgets, multumesc pt sfat!


Titlul: Răspuns: 014 Secventa
Scris de: Vlad Dumitru-Popescu din Martie 04, 2015, 13:44:00
Eu facusem initial problema cu o stiva, cu compexitate O(n) si o constanta de vreo 4, dar lua 80 de puncte din cauza a doua teste care dadeau TLE . Pentru cei care au aceeasi problema, sa stiti ca pentru mine parsarea a scos 100 pct.  :D :D :D


Titlul: Răspuns: 014 Secventa
Scris de: Ion Silviu din Septembrie 22, 2015, 17:51:11
Nu e necesar de folosit deque,o solutie cu RMQ se incadreaza perfect in timp. :D :D


Titlul: Răspuns: 014 Secventa
Scris de: Mihai Calancea din Septembrie 22, 2015, 20:46:26
Dar un deque e mai simplu decât un RMQ  :).


Titlul: Răspuns: 014 Secventa
Scris de: Lucian Maciuca din Decembrie 07, 2015, 19:14:16
Yaay, dupa atata timp, insfarsit mi-a iesit solutia


Titlul: Răspuns: 014 Secventa
Scris de: Cotet Teodor din Septembrie 11, 2016, 00:26:59
Solutia in O(N) ia 80 de puncte. M-am uitat pe ultimele surse de 100 si nu am gasit niciuna care sa nu parseze citirea, ar trebuie marita limita de timp.


Titlul: Răspuns: 014 Secventa
Scris de: Mihai Radovici din Martie 03, 2017, 13:05:06
imi poate spune cineva unde gresesc ?
Cod:
for (i=1;i<=n;++i){
        fin>>x;
        if (ps==0)
            d.pop_back();
        while(x<d.front()&&!d.empty()){
            d.pop_front();
            ++ps;
            }
        d.push_front(x);
        --ps;
        if (d.back()>maxZ&&i>=k){
            maxZ=d.back();
            dr=i;
            st=i-k+1;}
    }


Titlul: Răspuns: 014 Secventa
Scris de: Bogdan Pop din Martie 04, 2017, 15:52:34
Cred ca trebuie sa ai mai multa grija cum elimini elementul back din deque.


Titlul: Răspuns: 014 Secventa
Scris de: Mihai Radovici din Martie 07, 2017, 08:44:25
imi poate spune cineva ce e gresit la sursa asta
Cod:
    for (i=1;i<=n;++i){
        while(!d.empty() && v[i]<=v[d.front()]) d.pop_front();
        d.push_front(i);
        if(d.back()<=i-k)
        d.pop_back();
        if (i>=k && v[d.back()]>maxZ){
            maxZ=v[d.back()];
            dr=i;
            st=i-k+1;}
    }


Titlul: Răspuns: 014 Secventa
Scris de: Mihai Radovici din Martie 07, 2017, 08:52:42
am gasit problema, e de la citire, trebuie parsata