infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Dan-Leonard Crestez din Martie 08, 2004, 19:54:18



Titlul: 004 Biti
Scris de: Dan-Leonard Crestez din Martie 08, 2004, 19:54:18
Aici puteţi discuta despre problema Biti (http://infoarena.ro/problema/biti).


Titlul: 004 Biti
Scris de: Tiberiu-Lucian Florea din Aprilie 08, 2004, 23:42:31
voi ce intelegeti prin "Program recieved signal SIGSEGV, Segmentation fault. 0x080485ba in bkt(k=318297 at biti.c:44"? io credeam ca eroarea SEGMENTATION FAULT apare cand incerci sa accesezi o zona de memorie nedeclarata, sau ceva de genu asta. Da acuma chiar am reverificat sursa si nu imi dau seama ce se intampla. Daca ar putea cineva sa se uite putin peste sursa mea si sa dea un diagnostic i-as fi foarte recunoscator. Spuneti si va dau un mail cu ea. Nu de alta, da chiar nu-mi dau seama  :evil:


Titlul: 004 Biti
Scris de: Eugen Neamtiu din Noiembrie 18, 2004, 18:34:38
Asa la intuitie: dupa cate vad incerci sa folosesti backtracking (recursiv?).

Noah, dupa anumit numar de apeluri recursive (cica k=318297?) stiva se umple (ca n-are decat 1 mega) si noul apel recursiv incearca sa se aloce in continuare cum ar veni, ocupand o zona de memorie care nu este a lui.

Si de acolo SEGMENTATION FAULT.

Parerea mea,  :wink:


Titlul: 004 Biti
Scris de: Munteanu Alexandru din Noiembrie 20, 2004, 13:33:24
eu nu am inteles din enunt ce trebuie sa fac? cineva poate sa imi explice mai clar ce trebuie sa gasesc?


Titlul: 004 Biti
Scris de: Bogdan-Cristian Tataroiu din Februarie 26, 2005, 09:53:59
Cum s-ar putea face problema asta fara backtracking?


Titlul: 004 Biti
Scris de: Cosmin Negruseri din Februarie 26, 2005, 15:24:09
Cauta pe net despre secventa deBrujin si o sa gasesti ca problema se rezolva cu ajutorul algoritmului de determinare a unui lant eulerian.


Titlul: 004 Biti
Scris de: VladS din Februarie 27, 2005, 20:52:39
Am citit intr-un text USACO:
Citat
Analysis: The vertices of the graph are the possibilities of N-1 cows. Being at a node corresponds to the last N-1 cows matching the node in color. That is, for N = 4, if the last 3 cows were wbw, then you are at the wbw node. Each node has out-degree of 2, corresponding to adding a black or white cow to the end of the sequence. In addition, each node has in-degree of 2, corresponding to whether the cow just before the last N-1 cows is black or white.

The graph is strongly connected, and the in-degree of each node equals its out-degree, so the graph has a Eulerian circuit.

The sequence corresponding to the Eulerian circuit is the sequence of N-1 cows of the first node in the circuit, followed by cows corresponding to the color of the edge.

Dar nu cred ca am inteles prea bine.
Deci pentru n=3 am nodurile "00", "01","10","11"? Si am muchie de la "00" la "00"?

P. S. : Daca veti considera ca acest mesaj nu respecta regulile forumului va rog sa-l stergeti.


Titlul: 004 Biti
Scris de: Croitoru Gabriel din Martie 12, 2005, 00:33:33
Nu ar merge problema mai bine daca ai afisa direct rezultatul!
Il generezi intr-un fisier auxiliar cu backtracking si copiezi rezultatele in fisierul sursa. Avand in vedere ca n<=20, ar trebui sa mearga.


Titlul: 004 Biti
Scris de: Voicu Octavian din Martie 12, 2005, 00:59:23
Pt N=3 ai nodurile 000, 001, 010, 011, 100, 101, 110, 111. Ai muchile astea (graf orientat):

000 => 000, 001
001 => 010, 011
010 => 100, 101
011 => 110, 111
100 => 000, 001
101 => 010, 011
110 => 100, 101
111 => 110, 111

De aici ai un circuit, de ex: 110=>101=>010=>100=>000=>001=>011=>111

Si ca sa obtii sirul, iei N-1 biti din primul nod si ultimul din restul:
1101000111 (e solutie si daca il citesti invers).


Titlul: 004 Biti
Scris de: Bogdan-Cristian Tataroiu din Martie 12, 2005, 11:34:56
Am reusit s-o fac in sfarsit. Pana la urma tot un fel de backtracking e, dar a fost nashpa ca nu mergea recursiv. Anyway, thanks :D


Titlul: 004 Biti
Scris de: Cosmin Negruseri din Martie 12, 2005, 16:13:42
Merge cu back nerecursiv ... dar ideea e de fapt gasirea unui ciclu euler in graful prezentat mai sus, daca vrei sa inveti ceva mai mult decat backtraking ar trebui sa incerci si a doua idee de rezolvare.


Titlul: 004 Biti
Scris de: Daniel Markovits din Aprilie 12, 2005, 23:00:53
Citat
Merge cu back nerecursiv ...


eu cu back (cu kmp) nu scot decat 65....  :idea:


Titlul: 004 Biti
Scris de: Iorgulescu Calin din Aprilie 13, 2005, 20:47:18
Eu pentru a determina un ciclu eulerian in graf foloseam o functie recursiva (poate nu cea mai buna metoda....) dar oricum.... imi lua doar 90 de pcte... Si ... am apelat la o idee mai neortodoxa si am transformat functia recursiva in functie iterativa cu niste goto-uri si am luat 100 de pcte. :D  Eram doar curios cum se poate face sa determini un ciclu eulerian fara o functie neaparat recursiva.


Titlul: 004 Biti
Scris de: Piros Lucian din Mai 19, 2005, 12:53:35
Citat din mesajul lui: Cosmin
Cauta pe net despre secventa deBrujin si o sa gasesti ca problema se rezolva cu ajutorul algoritmului de determinare a unui lant eulerian.


Ai si un link? Eu am cautat pe net insa n-am gasit nimic :(


Titlul: 004 Biti
Scris de: Cosmin Negruseri din Mai 19, 2005, 18:18:04
Probabil motivul pentru care nu gasesti e ca am scris gresit ... e  deBruijn nu deBrujin cum am scris eu si daca vrei si un link uite aici: http://planetmath.org/encyclopedia/DeBruijnDigraph.html . Probabil o sa gasesti chestii mai bune daca vei cauta pe google.


Titlul: 004 Biti
Scris de: Piros Lucian din Mai 20, 2005, 12:27:38
Citat din mesajul lui: Cosmin
Probabil motivul pentru care nu gasesti e ca am scris gresit ... e  deBruijn nu deBrujin cum am scris eu si daca vrei si un link uite aici: http://planetmath.org/encyclopedia/DeBruijnDigraph.html . Probabil o sa gasesti chestii mai bune daca vei cauta pe google.


Da....merci M-am prins ca era scris gresit dupa ce am postat :). Anyway, site-urile pe care le-am gasit sunt mult prea expeditive....ma asteptam sa gasesc mai multe explicatii si argumente pt ceea ce zic ei :(. Thanks again


Titlul: 004 Biti
Scris de: Cosmin Negruseri din Mai 20, 2005, 13:13:16
Mie mi se pare destul de clara ideea si din linkul ce ti l-am dat eu ....


Titlul: 004 Biti
Scris de: Piros Lucian din Mai 27, 2005, 10:25:48
Citat din mesajul lui: Cosmin
Mie mi se pare destul de clara ideea si din linkul ce ti l-am dat eu ....


Ai dreptate....thanks. Pacat ca nu merge problema recursiv :(. Anyway...nice to learn smth new. 10x


Titlul: 004 Biti
Scris de: cristi8 din Mai 27, 2005, 16:25:16
si eu am facut tot cu back nerecursiv..
 cum se determina lantul eulerian ?


Titlul: 004 Biti
Scris de: Cosmin Negruseri din Mai 27, 2005, 17:49:31
Uite ce scrie pe usaco training gate:
Citat
The Algorithm
Detecting whether a graph has an Eulerian tour or circuit is actually easy; two different rules apply.

A graph has an Eulerian circuit if and only if it is connected (once you throw out all nodes of degree 0) and every node has `even degree'.
A graph has an Eulerian path if and only if it is connected and every node except two has even degree.
In the second case, one of the two nodes which has odd degree must be the start node, while the other is the end node.
The basic idea of the algorithm is to start at some node the graph and determine a circuit back to that same node. Now, as the circuit is added (in reverse order, as it turns out), the algorithm ensures that all the edges of all the nodes along that path have been used. If there is some node along that path which has an edge that has not been used, then the algorithm finds a circuit starting at that node which uses that edge and splices this new circuit into the current one. This continues until all the edges of every node in the original circuit have been used, which, since the graph is connected, implies that all the edges have been used, so the resulting circuit is Eulerian.

More formally, to determine a Eulerian circuit of a graph which has one, pick a starting node and recurse on it. At each recursive step:

Pick a starting node and recurse on that node. At each step:
If the node has no neighbors, then append the node to the circuit and return
If the node has a neighbor, then make a list of the neighbors and process them (which includes deleting them from the list of nodes on which to work) until the node has no more neighbors
To process a node, delete the edge between the current node and its neighbor, recurse on the neighbor, and postpend the current node to the circuit.
And here's the pseudocode:
Cod:

# circuit is a global array
   find_euler_circuit
     circuitpos = 0
     find_circuit(node 1)

# nextnode and visited is a local array
# the path will be found in reverse order
  find_circuit(node i)

    if node i has no neighbors then
      circuit(circuitpos) = node i
      circuitpos = circuitpos + 1
    else
      while (node i has neighbors)
          pick a random neighbor node j of node i
          delete_edges (node j, node i)
          find_circuit (node j)
      circuit(circuitpos) = node i
      circuitpos = circuitpos + 1

To find an Eulerian tour, simply find one of the nodes which has odd degree and call find_circuit with it.

Both of these algorithms run in O(m + n) time, where m is the number of edges and n is the number of nodes, if you store the graph in adjacency list form. With larger graphs, there's a danger of overflowing the run-time stack, so you might have to use your own stack.



Titlul: 004 Biti
Scris de: cristi8 din Mai 27, 2005, 21:20:26
:!: mersi mult


Titlul: 004 Biti
Scris de: Piros Lucian din Mai 30, 2005, 09:58:59
Tocmai...algoritmul pt determinarea lantului eulerian e recursiv....insa din pacate pt problema biti nu prea merge pt ca da stiva peste cap.... (Sau cel mai corect spus....eu nu am reusit sa fac algoritmul pt determinarea lantului eulerian recursiv). Si am recurs la metode total neortodoxe (gen goto :-k). Anyway 10x pt o gramada de lucruri noi invatate din aceasta problema. Si inca o data thanks Cosmin pt hinturi


Titlul: 004 Biti
Scris de: Cosmin Negruseri din Mai 30, 2005, 11:26:48
Pentru a nu il face recursiv poti folosi un vector in loc de stiva ... asa cum poti face dfs iterativ, poti face si ciclu eulerian iterativ. Backtraknigu nu il faci de obicei recursiv si cand ai nevoie de stiva mai mare iterativ??? Astea nu sunt trucuri sunt metode de implementare ale aceluiasi algoritm ... ce ai facut cu goto-uri probabil ca e mai dubios da asta nu inseamna ca nu exista metoda eleganta iterativa care face acelasi lucru.


Titlul: 004 Biti
Scris de: Deac Andrei din August 01, 2005, 13:26:04
Am vazut niste idei de rez a problemei de am cazut in cur da io zic ca cel mai usor s-ar face cum am facut-o io :D  !!! cine nu vrea sa stie rezolvarea sa nu citeasca mai departe!!!!



Se face cu un algoritm arhicunoscut:greedy daca stim ca trebuie sa fie prima din punct de vedere lexicografic atunci punem tot timpu 0 si numa daca nu se poate(un sir de booleane ne spune daca o fost luat nr sau nu) atunci punem 1 si nu mai veificam nimic(ceea ce reduce marimea sirului la jumatate).Mai trebuie facuta o precizare imp.:la inceput se pun n de 0 si la sf n-1 de 0 si atunce cand pornim greedyu toate nr de forma 10000, 1100 ,1110 se iau ca si cum ar fi folosite si dupa ce se termina greedy punem zerourile ca sa apara si ele.
prin metoda asta nu ne trebuie decat un singur sir 500.000 de booleane care daca chiar vreau se poate trece in lucru pe biti si si face mult mai mic da neeee :twisted: !

io am luat 100 asa ca puti incerca


Titlul: 004 Biti
Scris de: VladS din August 01, 2005, 13:44:39
Pai asta e implementarea iterativa a circuitului eulerian.


Titlul: damn
Scris de: Lucian Onea din Martie 17, 2006, 14:22:08
Deci, am facut circuit eulerian, frumos, ar trebuii sa imi merarga..numai ca iau doar 10 puncte...nu ma prind. Sgiur e ceva cu ordinea lexicografica, ca  de ex la N=4 NU imi iese ca la exemplul ala din linkul postat(cu de Burjin), chit ca e corect rapsunsul, numai ca deh, nu e ordinea lexicografica ca la ala. Am facut ciclul de mana si imi da bine cum imi da mie, nu inteleg de ce nu e asa.

Cand selectezi nodurile , selectezi mai intai muchia ce se termina in 1 si a doua oara pe cea care se termina in 0. Daca faci invers se blocheaza algoritmul pt ca nu contruieste ciclul bine. Daca va uitati la circuitul pe care il  da ca exemplu in link o tot ia pe 1,la inceput , cum am zis..si la un moment dat are de ales intre 1 si 0 si o ia pe 0 prima oara. not fair :(
Ma ajuta cineva?


Titlul: 004 Biti
Scris de: tmac din Martie 24, 2006, 17:35:57
caut un ciclu eulerian pe un graf format din elementele de lungime n-1 (0 ... 2^(n-1)) in care fiecare nod i are muchie la (2*i) % 2^(n-1) si la (2*i+1) % 2^(n-1). si apoi cum fac sa dau de sirul ala minim ?? cam incercat toate posibilitatile ... ?


Titlul: 004 Biti
Scris de: Tandrau Alexandru din Martie 24, 2006, 20:08:41
Citeste postul lui Stilgar de mai sus.. te poate ajuta


Titlul: Raspuns: 004 Biti
Scris de: Victor-Nicolae Savu din Aprilie 09, 2006, 12:41:35
Am vazut k evaluarea se face pe 20 de teste (f. probabil pt. toate cele 20 de valori ale lui n). Am rezolvat problema, iar mie, acasa , pt. testele cu n=(1, 2, 3, 4) imi da corect (cel putin pt. aceste teste.. tind sa cred k shi celelalte raspunsuri sunt tot corecte  :-' ). Oricum, iau doar 5 p. Nu primesc TLE, ci WA (timpul maxim e de 0.14 s/ test).

 [-o&lt; Va rog, daca se poate, sa imi dati un exemplu de output corect pt n intre 4 shi 6 k sa ma asigur k am facut bine... Chiar nu inteleg unde pot sa greshesc. Am tinut cont shi de prioritatea lexicografica.


Titlul: Re: 004 Biti
Scris de: Adriana Sperlea din Aprilie 09, 2006, 13:08:33
Pentru n = 5 da

Cod:
36
000001000110010100111010110111110000


Titlul: Raspuns: 004 Biti
Scris de: Victor-Nicolae Savu din Aprilie 09, 2006, 14:24:05
Iti multumesc mult! Cred k am o greseala pe undeva.Raspunsul meu nu era minim lexicografic after all..  :-k


Titlul: Raspuns: 004 Biti
Scris de: Adrian Dobrescu din Aprilie 23, 2006, 20:53:19
Am rezolvat problema cu ciclu eulerian dar nu stiu cum ati facut-o voi cu back iterativ. Datorita dimensiunilor mari mi se pare aproape imposibil. Ce puneti pe un nivel???


Titlul: Raspuns: 004 Biti
Scris de: Victor-Nicolae Savu din Aprilie 24, 2006, 14:26:23
nu shtiu cum faci U parcurgerea, dar dak porneshti sa spunem din 000 pt. n=3 ar trebui sa treci prin drumul:
000>001>010>101>011>111>110>100
cum fiecare nod din graph are exact 2 fii, poti retine ushor in care din ei te-ai dus la un moment dat, codificand fiul mai mic al unui nod cu 0 shi pe celalalt cu 1. pt. ex de mai sus ai avea:
(radacina : 000)>1>0>1>1>1>0>0
dak il citeshti asha, vei vedea k e raspunsul corect :P. Oricum, secventa se genereaza back, in maxim 2^n (2^20 ~ 1 000 000). Pornind cu radacina in 0..000 (sau maxim in 0..001) vei avea minim lexicografic.

______________
Rog moderatorii Infoarena sa stearga acest post daca nu corespunde cerintelor forumului


Titlul: Re: 004 Biti
Scris de: Sima Mihai Cotizo -vechi din Iunie 07, 2006, 19:32:00
ma scuzati ca intervin dupa atata timp... dar ce vrea problema asta sa facem nu este un ciclu hamiltonian? ala stiu eu ca cere sa trecem prin toate nodurile si nu prin toate muchiile (ca in problema, daca trecem prin toate muchiile, o sa avem o lungime mult mai mare)
si determinarea unui ciclu hamiltonian nu are complexitate exponentiala (adica... nu e back ? ? ? ) eu asa stiam, desi e probabil sa gresesc ???


Titlul: Raspuns: 004 Biti
Scris de: Victor-Nicolae Savu din Iunie 07, 2006, 19:53:36
shi eu ce spuneam???!!! E back! E back!   :readthis: ^


Titlul: Raspuns: 004 Biti
Scris de: Cosmin Negruseri din Iunie 07, 2006, 21:20:00
Ati citit tot threadul??????????? Se poate face cu algoritm polinomial de gasire a unui ciclu eulerian!!!!!!!!!! Se poate face si cu back, dar nu e o problema NP! Deci cum spuneam NU e back! NU e back!


Titlul: Re: 004 Biti
Scris de: Sima Mihai Cotizo -vechi din Iunie 08, 2006, 09:16:07
am citit tot threadul de 10 ori... si d-aia zic.  Am gasit niste definitii:

  Ciclu eulerian = ciclu simplu care contine toate muchiile unui graf
  Ciclu hamiltonoan = ciclu elementar care contine toate nodurile unui graf

la asta ma refer... s-o fi facand si fara back, nu zic... dar daca facem un ciclu eulerian o sa avem toate muchiile => or sa fie unele noduri de mai multe ori => secventa nu mai e minima... nu?


Titlul: Raspuns: 004 Biti
Scris de: u-92 din Iunie 08, 2006, 13:00:06
Nu ai inteles... atribui fiecarei muchii un cod si din cauza asta iti trebuie toate muchiile


Titlul: Raspuns: 004 Biti
Scris de: blasters din Iulie 13, 2006, 16:45:51
Hmmm......... ciudat........ eu am luat 100 d puncte cu un backtracking recursiv ( am folosit operatii p biti) dar totushi local pentru testele cu n=19 shi 20 primesc segmentation fault....


Titlul: Răspuns: 004 Biti
Scris de: George Guraliuc din Aprilie 24, 2007, 21:03:40
Am vazut niste idei de rez a problemei de am cazut in cur da io zic ca cel mai usor s-ar face cum am facut-o io :D  !!! cine nu vrea sa stie rezolvarea sa nu citeasca mai departe!!!!



Se face cu un algoritm arhicunoscut:greedy daca stim ca trebuie sa fie prima din punct de vedere lexicografic atunci punem tot timpu 0 si numa daca nu se poate(un sir de booleane ne spune daca o fost luat nr sau nu) atunci punem 1 si nu mai veificam nimic(ceea ce reduce marimea sirului la jumatate).Mai trebuie facuta o precizare imp.:la inceput se pun n de 0 si la sf n-1 de 0 si atunce cand pornim greedyu toate nr de forma 10000, 1100 ,1110 se iau ca si cum ar fi folosite si dupa ce se termina greedy punem zerourile ca sa apara si ele.
prin metoda asta nu ne trebuie decat un singur sir 500.000 de booleane care daca chiar vreau se poate trece in lucru pe biti si si face mult mai mic da neeee :twisted: !

io am luat 100 asa ca puti incerca
Nu se poate spune ca e greedy, considera urmatorul contraexemplu: sa zicem ca la pasul k se poate pune si 0 si 1. Alegem 0, facem un nr n  de pasi inainte si ne blocam (pentru ca 0 a fost alegerea gresita). Acum trebuie sa facem n pasi inapoi si sa punem 1. Dar greedy nu face intoarceri, ci contruieste solutia progresiv alegand optiunea care pare cea mai buna la un moment dat.
Probabil ca ai folosit backtracking nerecursiv si nu ti-ai dat seama.


Titlul: Răspuns: 004 Biti
Scris de: Codrin LACHE din Aprilie 06, 2008, 17:09:43
fara sa cunosc notiunea de graf..nu voi putea rezolva problema? ](*,)


Titlul: Răspuns: 004 Biti
Scris de: Andrei Grigorean din Aprilie 06, 2008, 18:23:04
Ba da, merge cu backtracking :).


Titlul: Răspuns: 004 Biti
Scris de: DarkMan din Iulie 19, 2008, 17:41:37
Asa la intuitie: dupa cate vad incerci sa folosesti backtracking (recursiv?).

Noah, dupa anumit numar de apeluri recursive (cica k=318297?) stiva se umple (ca n-are decat 1 mega) si noul apel recursiv incearca sa se aloce in continuare cum ar veni, ocupand o zona de memorie care nu este a lui.

Si de acolo SEGMENTATION FAULT.

Parerea mea,  :wink:


Titlul: Răspuns: 004 Biti
Scris de: S. Alex din August 20, 2008, 10:17:43
o mica rugaminte .. niste exemple .. mai precis pt 5 de ex cat trebuie sa deie? nu inteleg ce am putut face de imi merge numa pt < 4  :'(


Titlul: Răspuns: 004 Biti
Scris de: Gabriel Bitis din August 20, 2008, 13:08:49
pt 5:
Cod:
36
000001000110010100111010110111110000
pt 6:
Cod:
69
000000100001100010100011100100101100110100111101010111011011111100000


Titlul: Răspuns: 004 Biti
Scris de: Feier Vlad din Decembrie 15, 2008, 23:10:22
Cred ca e o diferenta enorma intre compilatorul de aici si al meu de acasa. Aici iau 100% punctaj, cu 0.5 sec pentrul ultimul test, iar pe calcu meu scot vreo ~2 sec la el, si e core2duo la 3ghz cu 4gb ram :-k. In fine, problema am rezolvat-o cu un backtracking iterativ optimizat la greu, nu e nevoie sa retii niciunde un graf, deoarece fiecare nod are 2 arce care ies din el si 2 care intra in el (unele noduri au chiar un arc catre ele insele). Este un graf orientat si fiecare arc poate fi gasit printr-o formula in O(1), cu alte cuvinte stim daca intre nodurile N si M exista arc in O(1), de aceea stim care este graful fara sa il retinem. Trebuie gasit un ciclu care trece prin toate nodurile o singura data, si incepe cu cel mai mic nod. Primul ciclu gasit este cel cerut. Astfel, programul se termina dupa ce s-a gasit primul ciclu. Numarul de cifre ale solutiei se calculeaza printr-o formula, deci tot in O(1). Bafta si celor care nu au rezolvat problema asta!

Apropos,

NU este ciclu eulerian!!!! Este un simplu drum care contine toate nodurile grafului si incepe cu cel mai mic posibil. Nu conteaza unde se termina si NU trebuie sa contina toate arcele.

Editat de moderator: Nu posta consecutiv pe aceeasi tema! Modifica mesajele anterioare!


Titlul: Răspuns: 004 Biti
Scris de: Paul-Dan Baltescu din Decembrie 15, 2008, 23:34:23
Ma bucur ca esti entuziast ca ti-a iesit problema, dar lasa-i si pe altii sa gandeasca pentru ei.


Titlul: Răspuns: Răspuns: 004 Biti
Scris de: Andrei Grigorean din Decembrie 16, 2008, 08:41:02
Apropos,

NU este ciclu eulerian!!!! Este un simplu drum care contine toate nodurile grafului si incepe cu cel mai mic posibil. Nu conteaza unde se termina si NU trebuie sa contina toate arcele.

Vlad, intamplator aceasta problema chiar este ciclu eulerian. Doar pentru ca tu nu ai fost in stare sa gasesti graful corect, nu inseamna ca el nu exista ;).


Titlul: Răspuns: 004 Biti
Scris de: Feier Vlad din Decembrie 16, 2008, 15:32:33
Ok, poate nu m-am exprimat suficient de bine. Vroiam sa exprim faptul ca am gasit o rezolvare mai simpla (dupa parerea mea). De ce trebuie sa gasesti graful? De ce trebuie sa gasesti ciclu eulerian? Cand graful il stii deja in O(1), adica stii orice "parte" din el printr-o singura formula, deci nu mai trebuie retinut, nu mai trebuie alocata matrice de 2^n * 2^n (sau liste liniare simplu inlantuite, cum facusem eu pana sa-mi dau seama ca nu trebuie). De ce trebuie ciclu eulerian cand un backtracking simplu (dar mai optimizat) rezolva totul? Este o regula ca trebuie gasit graful si apoi ciclul eulerian? Nu. Problema o poti rezolva in orice fel, atat timp cat raspunsul este corect. Eu am gasit o solutie ce scoate 0.5 s pentru ultimul test. Si am plecat de la un singur post de mai sus, care este defapt exemplul n=3 al lui Voicu Octavian. Nu consideri ca probleme astea le rezolvi si ca sa-ti largesti orizontul gandirii, originalitatea? Daca tot ce faci este sa citesti posturile si sa te iei dupa ele, practic tu nu ai "evoluat" decat pe plan teoretic, pentru ca acum stii de deBruijn, de graful lui si eventual de ciclu eulerian, daca nu stiai deja. Si da, initial am citit ca e ceva cu ciclu eulerian, dar inainte de a asterne pe ecran algoritmul pentru gasirea lui, am stat si m-am gandit, am scris pe foaie solutia si am vazut ca nu e ciclu eulerian pentru ca nu trece prin toate arcele. Daca fiecare nod are 2 arce de iesire si 2 de intrare, un ciclu eulerian ar trece prin fiecare nod de 2 ori, adica am avea o secventa 010100101xxxxx...xxx de 2 ori in solutia finala, ceea ce ar duce la lungirea solutiei, si deci nu la cea mai scurta solutie.

Cu alte cuvinte, te complici cu graful si ciclul eulerian, consumi memorie si timp de computatie.


Titlul: Răspuns: 004 Biti
Scris de: Andrei Grigorean din Decembrie 16, 2008, 15:55:28
Hai sa o lasam balta.


Titlul: Răspuns: 004 Biti
Scris de: Sima Cotizo din Decembrie 16, 2008, 16:28:13
Mai exact, ceea ce faci tu foloeseste in mod mascat graful ;)


Titlul: Răspuns: 004 Biti
Scris de: Halalai Tudor Andrei din Februarie 15, 2010, 17:43:37
pai....
cam toti care au comentat stiu grafuri si backtracking
cum sa zic...
N-aveti ceva lincuri despre astea??????? :'(


Titlul: Răspuns: 004 Biti
Scris de: Florian Marcu din Februarie 15, 2010, 19:06:50
Cel mai bine e sa le inveti ( si sa lucrezi problemele ) din manual.  :)


Titlul: Răspuns: 004 Biti
Scris de: Halalai Tudor Andrei din Februarie 16, 2010, 15:40:00
care manual??? :-s


Titlul: Răspuns: 004 Biti
Scris de: Simoiu Robert din Februarie 16, 2010, 16:07:36
care manual??? :-s
MANUAL=Carte care cuprinde noțiunile de bază ale unei științe, ale unei arte sau ale unei îndeletniciri practice; spec. carte de școală.  Adica manualul tau de la clasa.


Titlul: Răspuns: 004 Biti
Scris de: Andrei din Iulie 09, 2010, 17:31:31
Am facut un back pentru a gasi ciclul eulerian intr-un graf. Merge bine pana la 16... pentru 17,18,19,20 ia mult prea mult timp. Cum as mai putea optimiza?
Cod:
	cat timp exista elemente in stiva
{
nod=ultimul nod din stiva;
daca nu am mai trecut prin muchia cu valoarea zero
{adaug nodul respectiv la stiva}
altfel daca nu am mai trecut prin muchia cu valoarea unu
{adaug nodul respectiv la stiva}
altfel {adaug nodul la ciclu}
}



Titlul: Răspuns: 004 Biti
Scris de: Petru Trimbitas din Iulie 09, 2010, 17:56:37
Pt ciclu eulerian nu faci back. De aceea nu iti intra in timp.  Poti sa rezolvi intai http://infoarena.ro/problema/ciclueuler  :thumbup:


Titlul: Răspuns: 004 Biti
Scris de: Mardare Rares din Decembrie 08, 2010, 22:42:33
Am incercat un backtracking cu vector de blocaj si iau maxim = 2^n si din fiecare combinatie fac << 1 sau (... << 1) + 1 si rezultatul sa nu fie mai mare ca maxim.
Problema e cand ajunge la ceva in genul 110 si sa ma duc in 100... daca fac 110<<1 imi da 1100 > maxim si (110<<1)+1 imi da 1101 care e la fel > maxim.

Cum naiba retin blocajele ?


Titlul: Răspuns: 004 Biti
Scris de: Vlad Tarniceru din Aprilie 02, 2011, 16:19:42
eu am facut backtracking iterativ si iau doar 30 de puncte.. ma asteptam sa iau cam atat, totusi cum as putea optimiza? (optimizata cred ca ar trebui transformarea din baza 2 in baza 10, pentru ca eu fac liniar, se poate in o(1) ?)
multumesc :)


Titlul: Răspuns: 004 Biti
Scris de: Antoanela Siminiuc din Aprilie 25, 2011, 14:25:07
De ce-mi zice eroare in evaluator? :(


Titlul: Răspuns: 004 Biti
Scris de: Alexutzaaa din Mai 18, 2011, 12:48:37
Dar cum generez bitii aia de lungime n?:( plz un hint, o idee cva .


Titlul: Răspuns: 004 Biti
Scris de: Simoiu Robert din Iunie 11, 2011, 14:16:08
Da, nu are rost sa mai raspunzi dupa atata timp :|.


Titlul: Răspuns: Re: 004 Biti
Scris de: Alexandru-Iancu Caragicu din Iunie 11, 2011, 15:26:44
Pentru n = 5 da

Cod:
36
000001000110010100111010110111110000

Tu cum ai reusit sa rezolvi problema fara sa trimiti sursa? Daca dau filtrare la monitor, nu apare nici o sursa, dar pe profilul tau apare problema drept rezolvata.  ???


Titlul: Răspuns: Re: 004 Biti
Scris de: Simoiu Robert din Iunie 11, 2011, 15:58:13
Pentru n = 5 da

Cod:
36
000001000110010100111010110111110000

Tu cum ai reusit sa rezolvi problema fara sa trimiti sursa? Daca dau filtrare la monitor, nu apare nici o sursa, dar pe profilul tau apare problema drept rezolvata.  ???
Auzi iti bati joc de forumul asta? Nu vezi ca postul ala e deja de mult timp ? Nu apare sursa fiindca a fost pe InfoArena 1 si nu s-au mai pastrat sursele  :eyebrow:.


Titlul: Răspuns: Re: 004 Biti
Scris de: Alexandru-Iancu Caragicu din Iunie 11, 2011, 16:07:31
Pentru n = 5 da

Cod:
36
000001000110010100111010110111110000

Tu cum ai reusit sa rezolvi problema fara sa trimiti sursa? Daca dau filtrare la monitor, nu apare nici o sursa, dar pe profilul tau apare problema drept rezolvata.  ???
Auzi iti bati joc de forumul asta? Nu vezi ca postul ala e deja de mult timp ? Nu apare sursa fiindca a fost pe InfoArena 1 si nu s-au mai pastrat sursele  :eyebrow:.

Nu imi bat joc de forum-ul asta. Nu am vazut scris ca nu se pastreaza sursele deci m-am mirat. Oricum, e rau daca nu se pastreaza pentru ca eu credeam ca le poti pastra pe infoarena.
Si ce daca e de mult timp? E un motiv pentru care nu e inchis.


Titlul: Răspuns: Re: 004 Biti
Scris de: Pripoae Teodor Anton din Iunie 11, 2011, 22:39:19
Pentru n = 5 da

Cod:
36
000001000110010100111010110111110000

Tu cum ai reusit sa rezolvi problema fara sa trimiti sursa? Daca dau filtrare la monitor, nu apare nici o sursa, dar pe profilul tau apare problema drept rezolvata.  ???
Auzi iti bati joc de forumul asta? Nu vezi ca postul ala e deja de mult timp ? Nu apare sursa fiindca a fost pe InfoArena 1 si nu s-au mai pastrat sursele  :eyebrow:.

Nu inteleg de ce te bagi singur in seama si arunci cu cuvinte aiurea. Omul doar a intrebat. Pana la urma forumul infoarena este in principal pentru intrebari.


Titlul: Răspuns: 004 Biti
Scris de: Simoiu Robert din Iunie 12, 2011, 09:02:14
Da, dar la un post asa vechi :| ? In fine nu ma mai bag sa nu mai aveti ce sa mai bagati de vina :P.


Titlul: Eroare la configurarea problemei
Scris de: Marius Gavrilescu din Octombrie 16, 2012, 12:12:52
Am reusit sa obtin 'Eroare la configurarea problemei' cu 3 surse proaste:
http://infoarena.ro/job_detail/796044 (http://infoarena.ro/job_detail/796044)
http://infoarena.ro/job_detail/796071 (http://infoarena.ro/job_detail/796071)
http://infoarena.ro/job_detail/796263 (http://infoarena.ro/job_detail/796263)


Titlul: 'Eroare la configurarea problemei'
Scris de: Zoltan Vicsacsan din Noiembrie 05, 2012, 21:51:53
Salut,
Si eu primesc 'Eroare la configurarea problemei', desi pe calculatorul meu merge fara probleme.



Titlul: Itzi Bitzi...
Scris de: Soucup Nicolae Silviu din Noiembrie 06, 2012, 01:14:19
TEORIA: Grafuri, cicluri hamiltoniene, inlantuiri, cautare recursiva, backtracking... Pentru N > 11...16 (depinde cum e setat stack-ul) se ajunge la STACK OVERFLOW
PRACTICA: Simularea cautarii recursive merge "batraneste" cu GOTO-uri si smecherii cu stackul (functioneaza chiar si pentru N=21) ;-)))))

biti.in
7

biti.out
134
00000001000001100001010000111000100100010110001101000111100100110010101001011100110110011101001111101010110101111011011101111111000000


Titlul: Răspuns: 004 Biti
Scris de: Stochitoiu Radu din Ianuarie 19, 2013, 16:14:55
Se pot lua cu backtracking recursiv clasic + o verificare 100 pct ?


Titlul: Răspuns: 004 Biti
Scris de: Kassay Akos din Aprilie 17, 2013, 18:41:08
Poate cineva sa-mi spuna daca se poate folosi bitset ? Ca ei am rezulvat folosind
Cod:
bitset<MAXNR> rezultat;
. La mine merge fara nici o problema, dar siteul nu-mi compileaza.


Titlul: Răspuns: 004 Biti
Scris de: Alex Velea din Aprilie 17, 2013, 19:08:01
Inainte sa comentezi, ar trebui sa iti citesti erorile de compilare
Trebuie doar sa sti engleza.

Cod:
user.cpp:17: error: ‘int index’ redeclared as different kind of symbol
/usr/include/string.h:480: error: previous declaration of ‘const char* index(const char*, int)’

Din asta poti intelege ca 'index' exista deja in string.h ( adica si in cstring )
Trebuie sa dai alt nume.

Ar trebui sa mearga dupa.
Problema e index-ul ..
bitset-ul nu are legatura