infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Andrei Grigorean din Noiembrie 17, 2013, 18:13:39



Titlul: 1438 Autobuze
Scris de: Andrei Grigorean din Noiembrie 17, 2013, 18:13:39
Aici puteţi discuta despre problema Autobuze (http://infoarena.ro/problema/autobuze).


Titlul: Răspuns: 1438 Autobuze
Scris de: Mihai Ionut Enache din Noiembrie 17, 2013, 23:11:02
Cum se rezolva de 100? Eu fac asa pentru 80 de puncte: sortez vectorul a si iau valoarea maxima (fie ea MaxVal). Apoi, pentru fiecare valoare a[j], iau toti multiplii sai <= MaxVal si ii caut binar in vectorul a. Daca am gasit vreun multiplu al lui a[j] la pozitia m, inseamna ca am muchie intre j si m in graful pe care il construiesc. Raspunsul este egal cu numarul de componente conexe din graf, lucru pe care il rezolv cu BFS. Vreo idee pentru 100? Se face altfel sau trebuie un pic optimizata ideea mea?


Titlul: Răspuns: 1438 Autobuze
Scris de: Duta Vlad din Noiembrie 18, 2013, 03:18:47
Vom publica articolul cu solutii in cel mult doua zile (dupa prezentarea/premierea de la Unibuc).

Ideea ta e buna, vezi daca nu cumva reusesti sa inlocuiesti cautarea binara cu ceva mai rapid.


Titlul: Răspuns: 1438 Autobuze
Scris de: Stavarache Petru Eric din Noiembrie 18, 2013, 11:35:08
Eu fac cu hash si marchez multiplii pentru a nu-i mai verifica si pe ei si tot 80 iau.


Titlul: Răspuns: 1438 Autobuze
Scris de: Cosmin Rusu din Noiembrie 19, 2013, 08:35:10
Am incercat cu hash si multimi disjuncte, insa iau 80 de puncte. Care ar fi ideea de 100 sau ce optimizari ar mai trebui sa fac?


Titlul: Răspuns: 1438 Autobuze
Scris de: Denis Mita din Noiembrie 19, 2013, 15:35:04
*SPOILER ALERT!*

Tii in hash toate numerele din vector cu pozitiile lor cu tot; Pe langa asta mai tii un vector unde marchezi daca o valoare se afla in vector,si inca un vector unde marchezi daca valoarea curenta ai gasit-o prin cea precedenta.Acum iei fiecare numar,si ii vezi multiplii;daca un multiplu se afla in multime il cauti in hash;dupa ce il gasesti faci muchie intre cele 2 pozitii din multime;apoi faci bfs ca sa vezi numarul componentelor conexe.



Titlul: Răspuns: 1438 Autobuze
Scris de: Baltatu Andrei-Mircea din Februarie 04, 2014, 16:35:01
http://ideone.com/bn388X
Cine ma poate ajuta si pe mine?Am facut cu paduri de multimi disjuncte dar pe 50% din teste iau mle.Nu inteleg de ce,trei vectori micuti si un map....


Titlul: Răspuns: 1438 Autobuze
Scris de: Dragos-Alin Rotaru din Februarie 04, 2014, 18:01:35
Incearca sa accesezi un element cu functia map::find()
Cod:
http://www.cplusplus.com/reference/map/map/operator[]/