infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Andrei Grigorean din Decembrie 13, 2010, 00:40:02



Titlul: 1095 Knumere
Scris de: Andrei Grigorean din Decembrie 13, 2010, 00:40:02
Aici puteti discuta despre problema Knumere (http://infoarena.ro/problema/knumere).


Titlul: Răspuns: 1095 Knumere
Scris de: Dan-Constantin Spatarel din Decembrie 15, 2010, 22:57:08
Am participat la concurs on-site si, apoi, am ascultat solutiile oficiale. Propun o solutie alternativa, cu care am obtinut punctaj maxim:

Se cauta binar solutia. In acest sens, trebuie implementata o functie prin care sa se verifice daca pentru un numar D, exista o subsecventa a sirului de intrare de lungime cel putin N - K, in care oricare doua elemente consecutive au diferenta <= D.

Astept pareri despre corectitudine, timpul de executie si dificultatea de implementare. :)


Titlul: Răspuns: 1095 Knumere
Scris de: Florian Marcu din Decembrie 16, 2010, 17:51:31
Banuiesc ca aceasta solutie nu ar trebui sa intre in timp. :) Pentru ca se poate si mai bine de O(NlogN).  :)


Titlul: Răspuns: 1095 Knumere
Scris de: Dan-Constantin Spatarel din Decembrie 16, 2010, 22:55:09
Solutia are o complexitate teoretica chiar mai proasta: O(N log D), unde D = 2*10^9, diferenta maxima dintre doua numere consecutive. Si totusi... Testul 10 - 640ms. Timpii de executie depind, in cazuri atat de fine, de complexitatea structurilor de date folosite si calitatea implementarii.


Titlul: Răspuns: 1095 Knumere
Scris de: Salajan Razvan din Februarie 27, 2012, 20:26:59
Am implementat solutia lui spatarel dar  i`au  90 de pct cu wa pe testul 2... Ma poate ajuta careva ?


Titlul: Răspuns: 1095 Knumere
Scris de: Eugenie Daniel Posdarascu din Februarie 28, 2012, 08:13:20
Pai se poate cu o complexitate mai buna.

 Hint : deque  :)


Titlul: Răspuns: 1095 Knumere
Scris de: Cosmin Rusu din Iulie 03, 2013, 20:04:56
Buna.
Iau 90 de puncte cu WA pe primul test. Imi puteti da un exemplu asemanator cu acesta? Am implementat ideea cu deque-uri. Multumesc anticipat.


Titlul: Răspuns: 1095 Knumere
Scris de: Alexandru Valeanu din Septembrie 01, 2013, 00:17:41
Salut!
In caz ca te mai intereseaza gresesti cand scoti un element din deque( cand nu mai poate face parte din secventa ). Secventa fiind de lungime L-1 nu trebuie scos atunci cand
 
Cod:
if( i - dq.front() >= l )
            dq.pop_front();
ci atunci cand
Cod:
if( i - dq.front() >= l - 1 )
            dq.pop_front();
.

Cu aceasta modificare sursa de ia 100p. Bafta!

PS: Dupa parerea mea ar trebui sa modifici si in while deoarece nu are rost sa tin un element in deque daca cel pe care urmeaza sa il inserez este egal cu el.
Ma refer la
Cod:
v[ dq.back() ] < v[i]
care ar trebui sa fie
Cod:
v[ dq.back() ] <= v[i]