Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 2650 Leonardo's Code  (Citit de 13032 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
fireatmyself
Nu mai tace
*****

Karma: 36
Deconectat Deconectat

Mesaje: 492



Vezi Profilul
« : Octombrie 26, 2007, 15:00:23 »

http://acm.tju.edu.cn/toj/showp2650.html

nu reusesc sa iau accepted. am incercat urmatoarea idee:

fie S, sirul meu din input si V sirul care trebuie sa-l afisez. fixez V[0] = t ('A'<=t<='Z'), apoi pe V[ V[0] ] il fac S[0], pe V[ V[ V[0] ] ] = S[ V[0] ], s.a.m.d pana cand, fie am ajuns de unde am plecat (V[0] = t), fie la o contradictie (vreau sa ii atribui lui V[l] o litera cand el are deja atribuita o alta sau vrea sa atribui o litera deja atribuita). in cel de-al doilea caz, pun V[0] = u (prima litera nefolosita anterior), resetez contoarele si pozitile folosite in aceasta bucla si reiau algoritmul. daca sunt pe cazul doi. caut primul V[l] necompletat (=0), ii atribui o valoare w (prima valoare nefolosita anterior) si reiau algoritmul.

sa nu fie buna ideea?

               
Memorat

Viata e scurta. Daca nu o putem lungi, macar s-o facem lata.
greco
Nu mai tace
*****

Karma: 144
Deconectat Deconectat

Mesaje: 434



Vezi Profilul
« Răspunde #1 : Octombrie 27, 2007, 17:34:38 »

E greu de urmarit ce zici pentru ca vorbesti de detaliile de implementare in loc sa descrii algoritmul propriu-zis. Incearca sa formulezi in termeni de cicluri solutia (nu conteaza ce vectorii tii si ce minuni mai faci pe-acolo).

 Ok
Memorat

Jump in the cockpit and start up the engines
Remove all the wheelblocks there's no time to waste
Gathering speed as we head down the runway
Gotta get airborne before it's too late.
fireatmyself
Nu mai tace
*****

Karma: 36
Deconectat Deconectat

Mesaje: 492



Vezi Profilul
« Răspunde #2 : Octombrie 27, 2007, 23:01:34 »

m-am gandit ca ajuta mai mult asa  Embarassed

here goes another try Very Happy

eu impart permutarea in cicluri astfel: initial ii fixez literei A o alta litera si incerc sa formez un ciclu pe baza acestei presupuneri. dupa ce am reusit trec la prima litera care nu face parte din niciun ciclu anterior, fac alta presupunere si repet rationamentul.

impartirea in cicluri se face astfel:
am considerat permutarea care cifreaza mesajul ca fiind o funcitie bijectiva de tipul f(x) = y, unde x si y sunt litere. mie mi se da, pentru un x, f(y). daca eu fixez un y pentru prima pozitie, este evident ca voi determina si alte valori ale acestei functii. spre exemplu:

   A B C D ....
f: _ _ _ _
   D B E C ....

daca fixez ca f(A) = C, stiu automat ca f(C) = D, apoi ca F(D) = E, etc.

algoritmul meu se opreste in trei situatii:
1. fie m-am intors la pozitia de la care am inceput si mi-a rezultat ca f(A) = C (pt exemplul de mai sus)
2. fie am ajuns la o contradictie: atribui lui f(x) o valoare, dar f(x) fusese setat anterior cu o alta.
3. incerc sa atribui o valoare de doua ori pentru doua elemente distincte

*cazurile 2 si 3 pot fi privite ca o incalcare a surjectivitatii, respectiv a injectivitatii functiei f.

daca sunt intr-unul din ultimele 2 cazuri, atunci consider alta valoare initiala si reiau algoritmul.
daca nu am ajuns la nico contradictie, inseamna ca am determina o parte din (sau chiar toate) valorile lui f si, prin urmare, voi relua algoritmul din primul x nesetat (daca acesta exista).

« Ultima modificare: Octombrie 27, 2007, 23:04:45 de către Bogdan A. Stoica » Memorat

Viata e scurta. Daca nu o putem lungi, macar s-o facem lata.
greco
Nu mai tace
*****

Karma: 144
Deconectat Deconectat

Mesaje: 434



Vezi Profilul
« Răspunde #3 : Octombrie 28, 2007, 17:18:37 »

Ma scuze sunt sigur ca ai explicat ok, dar eu nu prea pot sa urmaresc. Uite daca te ajuta hint: nu te intereseaza permutarea data ci doar lungimile ciclurilor din ea. Si cand calculezi un ciclu nu exista cazuri particulare, daca incepi din t si mergi pe ciclu vei ajunge tot in t pentru ca altfel n-ar fi bijectiva, adica n-ar fi permutare.
Memorat

Jump in the cockpit and start up the engines
Remove all the wheelblocks there's no time to waste
Gathering speed as we head down the runway
Gotta get airborne before it's too late.
fireatmyself
Nu mai tace
*****

Karma: 36
Deconectat Deconectat

Mesaje: 492



Vezi Profilul
« Răspunde #4 : Octombrie 28, 2007, 18:43:07 »

nu-i nimic varule. important e sa inteleaga cel ce citeste si orice sfat este binevenit Very Happy

cat despre problema... nu mi-am dat seama ca ajung tot in t, desi eu tot presupuneam ca e bijectiva  Aha multam pentru sfaturi Smile
Memorat

Viata e scurta. Daca nu o putem lungi, macar s-o facem lata.
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines