infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Adrian Diaconu din Ianuarie 27, 2007, 18:18:48



Titlul: 310 Secventa 5
Scris de: Adrian Diaconu din Ianuarie 27, 2007, 18:18:48
Aici puteţi discuta despre problema Secventa 5 (http://infoarena.ro/problema/secv5).


Titlul: Raspuns: 313 Secventa 5
Scris de: adrian din Ianuarie 28, 2007, 15:02:03
 exista sursa de 100 in pascal?


Titlul: Răspuns: 310 Secventa 5
Scris de: Savin Tiberiu din Ianuarie 31, 2007, 18:49:57
imi poate spune si mie cineva cat da pe testu
Cod:
20 5 15
10
11
8
7
7
20
11
9
9
6
10
8
11
20
9
7
5
5
11
10
mie imi da 123 atat cu solutia in n^2 cat si cu solutia in o(n). Ciudat insa ca pe infoarena amandoua iau 0 puncte. Si toate testele care le-am dat eu au mers (alea care le-am putut testa pe foaie).
PS: sper ca putem folosi map pe infoarena (chiar daca tre sa fac pana la urma hashingu de mana ca sa iau 100).


Titlul: Răspuns: 310 Secventa 5
Scris de: Mircea Pasoi din Ianuarie 31, 2007, 19:26:01
Ai avut grija sa citesti numerele pe unsigned?


Titlul: Răspuns: 310 Secventa 5
Scris de: Savin Tiberiu din Ianuarie 31, 2007, 19:33:47
 ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,)
damn it asta era, ms mircea akuma iau 60, cu TLE pe restu (probabil din cauza ca am le-am long long pe toate ptr a rezolva situatia mai repede si din cauza ca folosesc map).


Titlul: Răspuns: 310 Secventa 5
Scris de: Filip Cristian Buruiana din Ianuarie 31, 2007, 19:50:37
Tipul long long e de 4 ori mai incet decat int, asa ca incearca cu unsigned.


Titlul: Răspuns: 310 Secventa 5
Scris de: Savin Tiberiu din Ianuarie 31, 2007, 19:56:22
si cu unsigned long int (formatul la citire am inteles ca e %lu) iau tot 60. Sa vad ce se intampla dupa ce implementez hashingu la mana, ptr ca pe map complexitatea e tot N log N.

[later edit] : am luat 90 cu hashingu de mana. ce functie de hashing ati folosit ptr 100??


Titlul: Răspuns: 310 Secventa 5
Scris de: Airinei Adrian din Ianuarie 31, 2007, 22:02:42
Aloci static tabela de hash? Mie mi-a mers cu cheia in jur de 200.000. (Poti folosi pentru mai multa eficienta 2 tabele de hash)


Titlul: Răspuns: 310 Secventa 5
Scris de: Savin Tiberiu din Ianuarie 31, 2007, 22:06:14
nu mai conteaza am luat 100 inlocuind instructiunea :

Cod:
for (i=1;i<=n;i++)
     v[i]=0;

cu

Cod:
memset(v,0,sizeof(v));

si a intrat de 100. Hashingu il aloc dinamic si folosesc constanta 666013 (am eu o placere ptr numaru asta :D )

Multumesc tuturor ptr ajutor.


Titlul: Răspuns: 310 Secventa 5
Scris de: Tabara Mihai din Ianuarie 31, 2007, 22:55:11
constanta 666013 (am eu o placere ptr numaru asta :D )

Iti mai spun eu vreo 10 oameni care au pasiune pentru numarul asta  :D

 =D&gt;


Titlul: Răspuns: 310 Secventa 5
Scris de: Barca Cristian Mihai din Februarie 03, 2007, 01:04:55
am o nelamurire: de ce merge mai repede scanf("%s", s) decat scanf("%d", &d) ??
pt trecerea de la 80 (in caz ca faci hash iar ultimele 2 teste iau cam ~1.530 ms) la 100 am parsat citirea dar nu am folosit gets() pt ca luam WA pe ult 2 teste (nush de ce??  :-k) si am folosit scanf("%s", s) , iar spre uimirea mea a intrat in timp! ceva opinii?   


Titlul: Răspuns: 310 Secventa 5
Scris de: Savin Tiberiu din Februarie 04, 2007, 13:49:01
la problema asta citirea dureaza 1.3-1.4 secunde :-o. Ptr ca un algoritm de complexitate o(n) ptr n - 1 milion merge cam in 0.1 hai sa zicem 0.2. dar tot mi se pare cam mult 1.3 ptr a citi 1 milion de numere :-/


Titlul: Răspuns: 310 Secventa 5
Scris de: Andrei Grigorean din Februarie 04, 2007, 16:58:36
cum anume citesti?


Titlul: Răspuns: 310 Secventa 5
Scris de: Savin Tiberiu din Februarie 04, 2007, 17:35:11
scanf/printf dar oricum limita de timp e de 1.5 secunde si din cate am vazut in monitorul de evaluare nu sunt singurul care s-a chinuit sa incadreze 1 milion de operatii in acest timp.


Titlul: Răspuns: 310 Secventa 5
Scris de: Andrei Grigorean din Februarie 04, 2007, 19:26:46
Incearca sa parsezi citirea, s-ar putea sa mearga mai bine.


Titlul: Răspuns: 310 Secventa 5
Scris de: Savin Tiberiu din Februarie 04, 2007, 22:44:28
am incercat sa citesc cu fgets dar luam WA pe niste teste nu inteleg de ce. Ce intelegi prin parsarea citirii - citirea linie cu linie?? dak asta e atunci diferenta nu cred ca e asa mare ptr ca numerele sunt date cate unul pe linie. deci tre sa citesti 1 milion de stringuri si tot cam pe acolo iesi cred. sper sa nu ma insel


Titlul: Răspuns: 310 Secventa 5
Scris de: Airinei Adrian din Februarie 05, 2007, 12:07:48
Se simte diferenta chiar daca citesti linie cu linie folosind fgets.


Titlul: Răspuns: 310 Secventa 5
Scris de: Marius Stroe din Februarie 05, 2007, 12:24:18
Sau citesti totul intr-un sir de caractere si extragi datele din sir. Merge simtitor mai repede pe site-uri ca www.spoj.pl dar nu si pe infoarena. La secv5 am castigat 0.3 s cu parsarea asta.


Titlul: Răspuns: 310 Secventa 5
Scris de: Bogdan-Cristian Tataroiu din Februarie 05, 2007, 12:48:01
0.3 s e foarte mult de fapt. Probleme gen color nu prea se pot face fara parsarea citirii. La asta se poate lua 100 puncte cu putin noroc fara sa parsezi citirea..


Titlul: Răspuns: 310 Secventa 5
Scris de: andreycurent din Ianuarie 31, 2012, 20:41:01
Imi poate da cineva o indicatie pentru 100 la problema aceasta? Iau 70.

Determin numarul de secvente care au cel mult U,respectiv L-1 elemente distincte. Folosesc un hash de pairs in care memorez numarul,respectiv numarul lui de aparitii in secventa actuala. Actualizez de fiecare data cand modific secventa numarul de aparitii. Parsez citirea... ce as mai putea face?


Titlul: Răspuns: 310 Secventa 5
Scris de: Paul-Dan Baltescu din Ianuarie 31, 2012, 21:04:54
Am facut accesul la sursele de la problema asta liber. Si pe mine m-a frustrat o gramada si am luat 100 abia dupa ce am intrat in echipa si m-am uitat la altii cum optimizeaza. Presupun ca e ceva de invatat aici... :)


Titlul: Răspuns: 310 Secventa 5
Scris de: andreycurent din Februarie 01, 2012, 09:39:33
 [-o&lt;  :D


Titlul: Răspuns: 310 Secventa 5
Scris de: FMI Ciprian Olariu din Septembrie 24, 2012, 11:44:31
Am trimis destul de multe surse (http://infoarena.ro/monitor?task=secv5&user=scipianus (http://infoarena.ro/monitor?task=secv5&user=scipianus)) cu mai toate optimizarile la care m-am putut gandi (ba cu normalizare cu sortare,ba cu hash,ba cu map) si mereu ia cel mult 80pct cu TLE. Ce mai pot optimiza? Vad ca ultima sursa de 100pct e prin august deci ar trebui ca inca sa se mai poata lua 100pct pe limita actuala,desi n-ar strica sa fie marita putin...


Titlul: Răspuns: 310 Secventa 5
Scris de: Paul-Dan Baltescu din Septembrie 24, 2012, 17:56:07
Am crescut limita de timp pentru ca sursa mea de 100 nu intra in timp.

Ca sa iau o 100 de puncte eu am folosit un hash de mana mai dubios. Am adaugat de la inceput toate elementele in hash si apoi cresteam/decrementam nr. de aparitii fara sa mai fac operatii de inserare sau stergere.


Titlul: Răspuns: 310 Secventa 5
Scris de: Claudiu Mihail din Aprilie 28, 2013, 03:31:36
Salut,

La problema asta am trimis la surse de mi s-a acrit, cu toate optimziarile la care m-am putut gandi:

- Algoritm O(n) (varianta cu determinat subsecventele de lungime L-1 si U) - bifat
- Citire parsata - bifat
- Hash de mana care e vizibil mult mai bun decat unoprdered_map/hash_map etc - bifat (desi sunt gata sa accept ca aici e posibil sa fie buba)

Recunosc ca deja a devenit extrem de frustranta problema asta. Am vazut ca multa lume s-a tot chinuit sa treaca de 80pct. Am vazut de asemenea ca s-a mentionat ca accesul la surse era la un moment dat liber. Daca nu mai e cazul, e dispus cineva sa-mi dea un hint despre cum se poate face problema asta de 100? Chiar am ajuns intr-un punct mort si as fi extrem de recunoscator pentru putin ajutor.

Claudiu


Titlul: Răspuns: 310 Secventa 5
Scris de: Paul-Dan Baltescu din Aprilie 28, 2013, 12:42:54
Accesul la sursele trimise e din nou liber. Nu stiu exact cum de s-a revocat.


Titlul: Răspuns: 310 Secventa 5
Scris de: UAIC.VlasCatalin din August 23, 2013, 15:45:16
Problema asta ma dispera  ](*,). Am facut toate operatiile pe unsigned int, am verificat citeva teste mici, testul din comentarii la fel imi da bine, am facut copypaste la o sursa de 100 si am generat teste random de 10^6 numere, absolut toate rezultatele coincid si totusi evaluatorul imi da numai primul test corect. Ajutati-ma va rog sa inteleg ce nu e in regula.  ](*,) ](*,) ](*,) ](*,) ](*,)


Titlul: Răspuns: 310 Secventa 5
Scris de: Salajan Razvan din August 23, 2013, 16:24:08
Uite un exemplu pe care pica :
Cod:
5 1 1
2
3
3
2
2
Raspunsul corect e 7.


Titlul: Răspuns: 310 Secventa 5
Scris de: UAIC.VlasCatalin din August 23, 2013, 17:23:18
Multumesc mult.  :D
 Se pare ca e ceva in neregula cu ideea mea, o sa incerc o alta abordare, care sper sa mearga bine.  :aha:


Titlul: Răspuns: 310 Secventa 5
Scris de: FMI Tilica Robert din Decembrie 26, 2013, 16:39:31
nu inteleg de ce trebuie sa ne chinuim atat de mult la optimizari marunte....atat timp cat complexitatea e ok ar trebui sa putem folosi stl fara griji si sa nu stam sa parsam citiri si sa ne uitam pe sursele altora sa vedem ce au mai optimizat.....


Titlul: Răspuns: 310 Secventa 5
Scris de: Mihai Calancea din Decembrie 26, 2013, 18:15:08
De-acord. In principiu asta e si filozofia noastra. Problemele care au limita stransa au ramas asa de cand s-a schimbat evaluatorul. Schimb acum limita :).

L.E Am dublat limita si iei doar 80.


Titlul: Răspuns: 310 Secventa 5
Scris de: FMI Tilica Robert din Decembrie 27, 2013, 02:00:57
nu m-am chinuit prea mult la problema asta o sa ma mai uit peste ea...spuneam la modu general  pt ca am vazut ca multi au probleme cu timpul la ea...mersi pt intelegere


Titlul: Răspuns: 310 Secventa 5
Scris de: theprdv din Iulie 10, 2015, 13:17:48
eu chiar nu am avut problem cu timpul, mi-a mers chiar in mai putin de jumatate din timp, 800 ms pe ultimu test ( http://www.infoarena.ro/job_detail/1459639 )


Titlul: Răspuns: 310 Secventa 5
Scris de: Florin Gabriel Haja din Iunie 23, 2017, 07:40:29
Am luat suta FĂRĂ HASHURI; e suficientă o sortare din STL în ordine crescătoare a vectorului a[] printr-un vector ind[] de indici și o renumerotare într-un vector b[] în pozițiile inițiale din vectorul a[]