infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Bogdan-Cristian Tataroiu din Martie 17, 2007, 12:21:04



Titlul: 352 Oite
Scris de: Bogdan-Cristian Tataroiu din Martie 17, 2007, 12:21:04
Aici puteţi discuta despre problema Oite (http://infoarena.ro/problema/oite).


Titlul: Răspuns: 352 Oite
Scris de: Bondane Cosmin din Aprilie 09, 2007, 21:08:11
Cat va da pentru :

Cod:
8 10
1 1 2 2 3 3 4 4


Titlul: Răspuns: 352 Oite
Scris de: Florin Pogocsan din Aprilie 09, 2007, 22:15:16
Cu o solutie de 100 :
Cod:
18


Titlul: Răspuns: 352 Oite
Scris de: Bondane Cosmin din Aprilie 10, 2007, 10:42:58
Ce complexitate este necesara pentru 80 de pcte si pentru 100 de pcte ?


Titlul: Răspuns: 352 Oite
Scris de: Andrei Grigorean din Aprilie 15, 2007, 19:48:07
O(N^2 log N) - 80
O(N^2) - 100


Titlul: Răspuns: 352 Oite
Scris de: Kadaff din Aprilie 30, 2007, 15:17:58
Cazuri particulare ceva? K imi iau wrong answer pe 2 teste. Si nush ce as putea greshi....


Titlul: Răspuns: 352 Oite
Scris de: Bondane Cosmin din Aprilie 30, 2007, 17:29:34
Un hint pentru o rezolvare optima ? Nu ma prind nicicum  :oops:


Titlul: Răspuns: 352 Oite
Scris de: Stefan Istrate din Aprilie 30, 2007, 19:13:14
Hashing :)


Titlul: Răspuns: 352 Oite
Scris de: Bondane Cosmin din Aprilie 30, 2007, 19:46:18
Merci. Atunci un bun motiv sa invat hashing :)


Titlul: Răspuns: 352 Oite
Scris de: Marius Stroe din Mai 04, 2007, 00:09:51
Am folosit map din C++ si am luat 2 TLE ... Cum ati implementat hashul ?


Titlul: Răspuns: 352 Oite
Scris de: Lucian Boca din Mai 04, 2007, 21:00:54
Am folosit map din C++ si am luat 2 TLE ... Cum ati implementat hashul ?
Map din STL este de fapt un arbore rosu-negru, deci update si query logaritmic. Foloseste un hash "home-brewed" ;)


Titlul: Răspuns: 352 Oite
Scris de: Marius Stroe din Mai 05, 2007, 13:45:53
O(N^2 log N) - 80
O(N^2) - 100

O(N2 log N) cu constanta 2 merge de 100.


Titlul: Răspuns: 352 Oite
Scris de: Adrian Diaconu din Mai 06, 2007, 17:59:44
Mda, calculatorul pe care se face evaluarea la infoarena este mai rapid decat cel care s-a folosit la Stele si aici nu prea se mai poate face diferenta intre N2*log N si N2.


Titlul: Răspuns: 352 Oite
Scris de: Andrei Homorodean din Iulie 12, 2007, 23:16:58
Cum tre sa faci hashing-ul? L-am facut cu modulo si am folosit vector din stl, si nu prea merge mai mult de 50. Ce fel de hash tre sa fac pentru 100? Sau sa schimb vector cu liste?


Titlul: Răspuns: 352 Oite
Scris de: Mihai Alex Ionescu din Ianuarie 15, 2009, 23:27:49
Tot 90pct iau si ma gandesc la prob asta de ceva timp

Ideea mea e ca la inceput sa inserez toate perechile de sume (i,j) cu i = 3 .. n - 1 si j = i + 1 .. n

Apoi
Cod:
int cnt = 0;
        for(int j=2;j<=N-2;++j)
        {
         for(int i=1; i<j; ++i)
          cnt += count(S - c[i] - c[j]);

         for(int i=j+2;i<=N;++i)
          erase(c[j+1] + c[i]);
        }

Astfel scot per total scot un numar minim de comparatii intre elemente ... corectatima daca gresesc
Ca hash am incercat tot ce se putea ... Open Addressing cu 2 hash, hash dublu, acum folosesc un hash simplu cu metoda inmultirii

Trebuie alta abordare totusi?  Eu pt hash folosesc un vector<int> de 3033 elemente  (la prob hashuri a intrat lejer in timp)
.  Trebuie facut hashul altfel ?  . Am incercat si dimensiuni mai mari ( < 660013) dar merge mult mai greoi 
Deci mai mult de atat nu vad ce as mai putea optimiza la rezolvarea cu hash-uri vorbind , cea cu cautarea binara n-am incercato


edit : am bagat un sort() si am luat 100 ;)  Ms Andrei :)


Titlul: Răspuns: 352 Oite
Scris de: Andrei Misarca din Ianuarie 15, 2009, 23:49:28
Sorteaza elementele ;)
Si eu luam 90 cu un TLE, si dupa sortare -> 100 :D


Titlul: Răspuns: 352 Oite
Scris de: Dragos din August 04, 2010, 10:12:59
Imi poate spune si mie cineva cum sa rezolv problema coliziunilor daca fac problema  cu map(sau cu hash_map)?
Pentru ca voi avea mai multe sume egale care sunt obtinute din elelmente diferite :-k (de examplu pe testul lui cos_min).
Multumesc anticipat!


Titlul: Răspuns: 352 Oite
Scris de: Andrei Misarca din August 04, 2010, 10:41:25
Cu un multimap sau hash_multimap (http://www.sgi.com/tech/stl/hash_multimap.html). Dar limita de timp pare destul de strânsă, nu am reușit mai mult de 80 cu hash_multimap.


Titlul: Răspuns: 352 Oite
Scris de: Paul-Dan Baltescu din August 05, 2010, 04:36:34
Eu am luat 100 cu unordered_map.

Nu prea inteleg ce coliziuni trebuie sa tratezi. Pur si simplu numeri de cate ori apare o suma.


Titlul: Răspuns: 352 Oite
Scris de: Dragos din August 05, 2010, 08:25:25
Eu am luat 100 cu unordered_map.

Nu prea inteleg ce coliziuni trebuie sa tratezi. Pur si simplu numeri de cate ori apare o suma.
8 10
1 1 2 2 3 3 4 4
Pai daca avem testul asta
1+4=5(primul si penultimul)
1+4=5(al doilea si ultimul)
1+4=5(primul si ultimul)
2+3=5
2+3=5
1+3=4
1+3=4
Iar eu trebuie sa bag sumele astea intr-un hash.
Eu am folosit sumele ca Key si o sa am mai multe perechi de numere cu aceiasi suma si la unele perechi nu voi putea ajunge ca sa le pot numara daca folosesc map.


Titlul: Răspuns: 352 Oite
Scris de: Paul-Dan Baltescu din August 05, 2010, 09:55:49
Nu inteleg ce te impiedica sa ajungi la ele. Probabil nu stii sa utilizezi un map prea bine. Merge sa faci in felul urmator:

Cod:
(unordered_)map <int, int> m;

...

for (int i = 1; i <= n; i++)
    for (int j = i+1; j <= n; ++j)
         m[a[i]+a[j]]++;

In m[ s ] retii de cate ori apare suma s, daca a fost introdusa in (unordered_)map.


Titlul: Răspuns: 352 Oite
Scris de: Mircea Dima din August 05, 2010, 11:03:31
cred ca el vrea sa afle cum verifici daca cei 4 indici sunt distincti :)


Titlul: Răspuns: 352 Oite
Scris de: Andrei Misarca din August 05, 2010, 12:19:45
Pentru a fi sigur că cei patru indici sunt distincți baleiezi prin șir și fixezi pe rând câte un element. Vei alege doi indici din dreapta elementului și doi din stânga elementului.



Titlul: Răspuns: 352 Oite
Scris de: Pirtoaca George Sebastian din Aprilie 06, 2012, 12:42:23
Nu am reusit sa trec de 90( nici cu double hashing macar ). Am incercat sa sortez fiecare lista cu sort(), si am luat TLE pe 8 teste. Ma poate lamurii cineva. Multumesc anticipat!


Titlul: Răspuns: 352 Oite
Scris de: FMI Ciprian Olariu din Aprilie 06, 2012, 13:23:37
Sigur se mai poate lua 100pct cu hashing? Se poate uita cineva pe sursa mea ( http://infoarena.ro/job_detail/730542?action=view-source (http://infoarena.ro/job_detail/730542?action=view-source) ) sa-mi dea vreun sfat pentru 100pct?  :-k


Titlul: Răspuns: 352 Oite
Scris de: Paul-Dan Baltescu din Aprilie 06, 2012, 20:30:48
Eu mi-am reevaluat sursa si inca iau 100 de puncte fara probleme. Ar fi de mentionat ca am folosit unordered_map.

Edit: Am dat acces liber la surse, poate ajuta pe cineva.


Titlul: Răspuns: 352 Oite
Scris de: Pirtoaca George Sebastian din Aprilie 07, 2012, 08:38:36
Am reusit pana la urma cu constanta 7919. Multumesc pentru ajutor!