infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Dan-Leonard Crestez din Martie 08, 2004, 20:03:09



Titlul: 015 Permutari II
Scris de: Dan-Leonard Crestez din Martie 08, 2004, 20:03:09
Aici puteţi discuta despre problema Permutari II (http://infoarena.ro/problema/perm2).


Titlul: 015 Permutari II
Scris de: Tiberiu-Lucian Florea din Martie 20, 2004, 00:58:59
am trimis rezolvarea la problema asta si am luat 95 p. (am ratat testul 1 :)). Am mai trimis-o o data ca sa ma conving, si, in loc de 100 p., sau macar tot de 95, am luat 85. (nu am modificat nimic). Am mai trimis apoi de cateva ori, si nu am luat acelasi punctaj de 2 ori la rand. (intre 85-95).

destul de ciudat, nu ?


Titlul: 015 Permutari II
Scris de: Cristian Strat din Martie 21, 2004, 14:37:17
da. ai dreptate. exista o mica problema la evaluator. din fericire am observat`o de ceva timp si va aparea o rezolvare in curand. banuiesc ca diferenta de punctaj era data de niste TLE-uri, nu? (vezi raport de evaluare)


Titlul: 015 Permutari II
Scris de: Anton Alexandru din Februarie 07, 2005, 20:55:29
Te superi daca iti cer primul test, ca habar nu am unde am putut gresi!!!


Titlul: 015 Permutari II
Scris de: Anton Alexandru din Februarie 08, 2005, 22:36:18
Citat
data de niste TLE-uri

Ce sunt alea TLE-uri?


Titlul: 015 Permutari II
Scris de: Ionel Corneliu Gog din Februarie 08, 2005, 22:43:51
TLE= TIme Limit Exceeded

Oricum acum merge la iei accepted. Trebuie doar sa observi o chichita:D


Titlul: 015 Permutari II
Scris de: Anton Alexandru din Februarie 09, 2005, 12:45:21
Va rog da-ti unui sarman primul test de al aceasta problema!!!


Titlul: 015 Permutari II
Scris de: cristi8 din Martie 25, 2005, 23:59:27
...nici mie nu imi ia primul test...
puteti totusi sa dati un indiciu despre primul test ? :D


Titlul: 015 Permutari II
Scris de: Cristian Strat din Martie 26, 2005, 01:04:27
lumea e pe la ONI asa ca intrebarile de acest gen trebuie sa-si mai astepte putin raspunsul.
10x


Titlul: 015 Permutari II
Scris de: Piros Lucian din Aprilie 05, 2005, 10:05:25
Sa traiasca evaluatorul si la mai mare :)
Uitati ce am obtinut eu:
TEST 1   ...[0.13s]...   Time limit exceeded
TEST 2   ...[0.01s]...   Corect!
TEST 3   ...[0.01s]...   Corect!
TEST 4   ...[0.01s]...   Corect!
TEST 5   ...[0.22s]...   Corect!
TEST 6   ...[0.01s]...   Corect!
TEST 7   ...[0.01s]...   Corect!
TEST 8   ...[0.01s]...   Corect!
TEST 9   ...[0.01s]...   Corect!
TEST 10   ...[0.13s]...   Time limit exceeded
TEST 11   ...[0.01s]...   Corect!
TEST 12   ...[0.07s]...   Corect!
TEST 13   ...[0.01s]...   Corect!
TEST 14   ...[0.01s]...   Corect!
TEST 15   ...[0.01s]...   Corect!
TEST 16   ...[0.01s]...   Corect!
TEST 17   ...[0.01s]...   Corect!
TEST 18   ...[0.02s]...   Corect!
TEST 19   ...[0.01s]...   Corect!
TEST 20   ...[0.01s]...   Corect!

Test 5 - 0.22s trece.....test1 - 0.13s pica test10 - 0.13s pica.
Sa fie oare 22<13  ](*,)  !?!?!!?


Titlul: 015 Permutari II
Scris de: Bindea Calin din Aprilie 05, 2005, 16:39:32
Si eu am obtinut ceva asemanator daca te uiti aici : http://info.devnet.ro/forum/viewtopic.php?t=306&highlight=
.. Oricum ideea e ca aia nu sunt timpii reali, sunt doar orientativi  :P


Titlul: 015 Permutari II
Scris de: Cristian Strat din Aprilie 05, 2005, 18:52:55
Citat din mesajul lui: pirosl

Sa fie oare 22<13  ](*,)  !?!?!!?

Nu e nevoie sa te dai cu capul de pereti.
In raport scrie:

Citat
Timpii de executie prezentati aici sunt orientativi. Evaluatorul foloseste un alt timer (mult mai exact) pentru a cronometra sursele compilate. Timpii reali pe configuratia curenta sunt cu ~0.015s mai mici decat cei raportati aici.


Titlul: 015 Permutari II
Scris de: cristi8 din Aprilie 05, 2005, 19:12:06
Citat din mesajul lui: Fr3eM4n
...nici mie nu imi ia primul test...
puteti totusi sa dati un indiciu despre primul test ?

Citat din mesajul lui: wickedman
lumea e pe la ONI asa ca intrebarile de acest gen trebuie sa-si mai astepte putin raspunsul.
10x


..puteti totusi da un indiciu la primu test ? a trecut ONI.. [-o<


Titlul: 015 Permutari II
Scris de: Piros Lucian din Aprilie 05, 2005, 19:25:59
Eu cred ca primul test e ceva de genul

100000
2 3 4 5 6 7 8 ..... 100000 1

sau

100000
2 3 4 5 6 7 8...49999 1 50001 50002 50003 .... 100000 50000


Titlul: 015 Permutari II
Scris de: u-92 din Aprilie 21, 2005, 20:25:12
nici mie nu-mi merge primul test.. pe exemplele alea cred ca "k"-ul e mult mai mare de 100.000.. dar totusi.. ce chichita trebuie sa observi?  :-k


Titlul: 015 Permutari II
Scris de: Piros Lucian din Aprilie 22, 2005, 09:41:51
Chichita........ = ciclu intr-o permutare


Titlul: 015 Permutari II
Scris de: u-92 din Aprilie 23, 2005, 11:33:00
pai asa am facut.. dar cum am mai zis, iau TLE la primul test


Titlul: 015 Permutari II
Scris de: cristi8 din Aprilie 23, 2005, 14:26:34
mie imi da raspuns incorect. poate cineva sa dea un indiciu despre testul asta ?

( pe timus am luat accepted cu aceasi sursa :D )

EDIT: am rescris cmmmc-ul si am luat 100... ma complicasem sa calculez factorii primi comuni si necomuni la puterea cea mai mare si dupa aia construiam raspunsul din ei :D


Titlul: 015 Permutari II
Scris de: Vlad Berteanu din August 05, 2005, 22:30:39
:oops:  Eu nu inteleg problema asta !!
 In exemplul 1.
 
Cod:

perm2.in
 6
 1 2 3 4 5 6
perm2.out
1

In enunt e dat un tabel unde arata cum se face P^1(i).
Dupa tabel P^1(1,2,3,4,5,6)=(2,3,4,5,6,1)
  (2,3,4,5,6,1) este diferit de (1,2,3,4,5,6), deci nu e permutare identica.
Explicati-mi va rog exemplul asta si daca se poate si inca unul. [-o<  :oops:


Titlul: 015 Permutari II
Scris de: cristi8 din August 05, 2005, 23:10:13
ok.. sa zicem ca tu citesti din perm2.in N-ul si vectorul a (a[1], a[2], .. a[n])
si sa zicem ca ai p[k][i ] cu semnificatia "valoarea de pe pozitia i din permutarea p^k"

o sa ai p[0][i ] = i, si in rest, p[k][i ] = a[p[k-1][i ]]
(gandeste-te la asta si fa eventual pe hartie sa-ti dai seama cum vine)

--------------------
tabelul din enunt era DOAR UN EXEMPLU de vector a  (acolo e notat cu P mare)
--------------------
..pentru exemplul care nu-l intelegi tu, ai a[i ] = i... deci evident, p[1][i ] = i, adica permutare identica dupa 1 pas


Titlul: 015 Permutari II
Scris de: Adriana Sperlea din Noiembrie 27, 2005, 15:12:55
pt exemplul n = 8 si 1 5 2 3 4 8 6 7, daca am facut eu bine pe hartie, raspunsul n-ar trebui sa fie 13?

Cod:

p^1    1 5 2 3 4 8 6 7
p^2    1 4 5 2 3 7 8 6
p^3    1 3 4 5 2 6 7 8
p^4    1 2 3 4 5 8 6 7
p^5    1 5 2 3 4 7 8 6
p^6    1 4 5 2 3 6 7 8
p^7    1 3 4 5 2 8 6 7
p^8    1 2 3 4 5 7 8 6
p^9    1 5 2 3 4 6 7 8
p^10   1 4 5 2 3 8 6 7
p^11   1 3 4 5 2 7 8 6
p^12   1 2 3 4 5 6 7 8
p^13   1 5 2 3 4 8 6 7


cam asa ar arata permutarile....si sunt 13. Daca n-am dreptate, sorry :surrender:


Titlul: 015 Permutari II
Scris de: ditzone din Noiembrie 27, 2005, 19:16:50
Trbuie aflat K astfel incat p^K este permutarea identica (1,2,3,...,n)... adica.. raspunsul pe exemplul acesta va fi 12 ..


Titlul: 015 Permutari II
Scris de: Adriana Sperlea din Noiembrie 27, 2005, 20:57:24
:idea: aaaa...acum pricep  :D ...sorry, am inteles eu gresit enuntu :oops:


Titlul: Raspuns: 015 Permutari II
Scris de: Prigoana Alexandru din Aprilie 13, 2006, 19:28:46
sigur e bun exemplu 2 ? eu primesc 3 ... cred ca acolo calculeaza p(p^1)


Titlul: Raspuns: 015 Permutari II
Scris de: ditzone din Aprilie 13, 2006, 20:28:38
Nu inteleg exact la ce te referi, dar exemplele sunt bune


Titlul: Re: 015 Permutari II
Scris de: Bogdan-Cristian Tataroiu din Aprilie 14, 2006, 09:59:05
Dupa ce problema asta a fost rezolvata de vreo 135 oameni nu crezi ca e cam absurd sa fie exemplele gresite? Mai citeste problema de multe ori pana intelegi ce vrea...


Titlul: Răspuns: 015 Permutari II
Scris de: Diaconescu Dragos din Martie 11, 2007, 23:33:24
Va rog frumos sa-mi oferiti si mie o indicatie pentru aceasta problema


Titlul: Răspuns: 015 Permutari II
Scris de: nash mit din Aprilie 19, 2007, 13:05:15
 ok .. algoritmul de rezolvare e clasic .. cu toate astea mai mult de 85 de punde nu iau ..


Titlul: Răspuns: 015 Permutari II
Scris de: Gabriel Bitis din Iulie 03, 2007, 17:51:27
Citat
8
1 5 2 3 4 8 6 7                  12

imi explica cineva exemplul de mai sus?


Titlul: Răspuns: 015 Permutari II
Scris de: Adrian Diaconu din Iulie 03, 2007, 18:54:34
p1: 1 5 2 3 4 8 6 7 
p2: 1 4 5 2 3 7 8 6
p3: 1 3 4 5 2 6 7 8
p4: 1 2 3 4 5 8 6 7
p5: 1 5 2 3 4 7 8 6
p6: 1 4 5 2 3 6 7 8
p7: 1 3 4 5 2 8 6 7
p8: 1 2 3 4 5 7 8 6
p9: 1 5 2 3 4 3 6 7 8
p10: 1 4 5 2 3 8 6 7
p11: 1 3 4 5 2 7 8 6
p12: 1 2 3 4 5 6 7 8

Deci raspunsul e 12.


Titlul: Răspuns: 015 Permutari II
Scris de: Ionescu Vlad din Iulie 04, 2007, 20:11:21
Imi dati va rog un indiciu pt teste 1 5 si 10? Iau TLE.. si nu prea stiu cum sa scap de el..

Aflu pentru fiecare numar in cati pasi ajunge pe pozitia finala, avand un while care il intoarce pe p1[p1[p1[...]]]... si apoi fac cmmmc al acestor numere. Si daca scot cmmmc-ul, tot da TLE pe testele alea. Am incercat sa tratez particular cazul 2 3 4 ... n 1 dar tot nu vrea...

Cum as putea face mai eficient?  :-k


Titlul: Răspuns: 015 Permutari II
Scris de: Adrian Diaconu din Iulie 04, 2007, 20:26:47
Marcheaza toate numerele prin care treci de-a lungul unui ciclu si pentru alea nu va mai trebui sa calculezi iar.
Complexitatea scade asa de la O(n2) la O(n)


Titlul: Răspuns: 015 Permutari II
Scris de: Ionescu Vlad din Iulie 05, 2007, 14:29:17
Multumesc, mi-a iesit!  :thumbup:


Titlul: Răspuns: 015 Permutari II
Scris de: Simionescu Andrei din Septembrie 03, 2008, 12:51:48
ok .. algoritmul de rezolvare e clasic .. cu toate astea mai mult de 85 de punde nu iau ..

chiar daca a trecut mult timp, 85 de puncte sunt pentru solutia brute-force ( O(n2) )
am testat eu aici (http://infoarena.ro/job_detail/205886)


Titlul: Răspuns: 015 Permutari II
Scris de: alexandru din Februarie 24, 2009, 20:39:34
Ma poate ajuta cineva, pentru problema aceasta eu fac o metoda mai mult babeste:
1)citesc datele de intrare
2) cat timp permutarea curenta nu este egala cu permutarea identica atunci:
           p[ i ]=v[p[ i ]];
           k++;
3) Afisez  k.
p[]= retin permutarea curent  si v[] este permutarea introdusa din fisier.
Cum as putea sa mai optimizez?
Si desi n-are legatura cu subiectul  exista  Numarul lui Stirling de speta 1?


Titlul: Răspuns: 015 Permutari II
Scris de: Andrei Misarca din Februarie 24, 2009, 21:00:45
Daca iti scrii toate puterile unei permutari (cred ca gasesti si pe forum toate formele scrise) vei observa ca pe o pozitie anumite elemente se tot repeta. Pentru exemplul trei pe pozitia 2 vor aparea 5, apoi 4, apoi 3 si 2, dupa care se reia de la capat. Tu tre sa determini gradul permutarii care are toate elementele pe pozitiile dorite, iar acest grad este cmmmc-ul repetitiilor tuturor elementelor. In al 3lea exemplu 1 ramane pe prima pozitie in orice permutare, 2,3,4,5 se repeta din 4 in 4, iar 6, 7 si 8 din 3 in 3, deci rezultatul cerut va fi cmmmc(1, 3, 4) = 12. Daca te chinui otzara, poti determina din cat in cat se repeta fiecare element in O(N). :)
Sper ca am fost de folos, si totodata nu prea explicit :) 


Titlul: Răspuns: 015 Permutari II
Scris de: Florian Marcu din Februarie 24, 2009, 21:43:45
Si desi n-are legatura cu subiectul  exista  Numarul lui Stirling de speta 1?

Da, Numarul lui Stirling de speta I reprezinta numarul de permutari ale elementelor {1,2,...,n} ce contin exact m cicluri. ( Secventa ( c1,c2, ... , ck ) se numeste ciclu in permutarea p, daca p(c1)=c2, p(c2)=c3, ... ,p(ck) = c1. )


Titlul: Răspuns: 015 Permutari II
Scris de: alexandru din Februarie 25, 2009, 06:52:34
@Andrei Misarca multumesc pentru explicatie, am citit comentarile de aici dar nu intleelgeam , din ce obtii cmmmc :)
@Marcu Florian: exista si o relatie de recurenta :-k


Titlul: Răspuns: 015 Permutari II
Scris de: Florian Marcu din Februarie 25, 2009, 17:59:35
s(n,m) - nr lui stirling de speta I.

* s(n,m) = 0, pt n<m
* s(n,m) = s(n-1,m-1) + n*s(n-1,m).

Explicatia: Elementul n poate forma singur cel de-al m-lea ciclu, sau poate fi inserat in cele m cicluri deja existente (in n moduri). Sper sa nu fi gresit.  :)


Titlul: Răspuns: 015 Permutari II
Scris de: alexandru din Martie 02, 2009, 18:45:07
conditia   n<m  este necesara dar nu suficienta, daca ai n=4,m=2 o sa dea o bucla la infinit. Am gasit
aici  (http://mathworld.wolfram.com/StirlingNumberoftheFirstKind.html), un articol interesant :)


Titlul: Răspuns: 015 Permutari II
Scris de: Florian Marcu din Martie 02, 2009, 19:35:47
Nu va intra in ciclu, pentru ca nu face decat sa numere niste permutari. Nu le si genereaza.  :)


Titlul: Răspuns: 015 Permutari II
Scris de: alexandru din Martie 03, 2009, 09:25:55
Am scris o functie recursiva si condtia de oprire am pus-o n<m, cnd returneazsa 0:
Cod:
int s(int n,int m)
  {
   if(n<m) return 0;
   return s(n-1,m-1)+n*s(n-1,m);
  }
dac dai n=4; m=2; mereu  n>m,  pentru ca scazi mereu 1 :P


Titlul: Răspuns: 015 Permutari II
Scris de: Andrici Cezar din Martie 05, 2009, 17:01:01
La testul 2 permutarile sunt:
p1: 3 4 1 2
p2: 4 1 2 3
p3: 1 2 3 4
p4: 2 3 4 1
Astea sunt?
Si daca da la testul 3 unde e 8 dc este 12 dc nu sunt la fel? :-'


Titlul: Răspuns: 015 Permutari II
Scris de: Gabriel Bitis din Martie 05, 2009, 17:18:25
La testul 2, permutarile sunt:
p1: 2 3 4 1
p2: 3 4 1 2
p3: 4 1 2 3
p4: 1 2 3 4

Pentru testul 3 s-a mai explicat de ce raspunsul e 12:
p1: 1 5 2 3 4 8 6 7 
p2: 1 4 5 2 3 7 8 6
p3: 1 3 4 5 2 6 7 8
p4: 1 2 3 4 5 8 6 7
p5: 1 5 2 3 4 7 8 6
p6: 1 4 5 2 3 6 7 8
p7: 1 3 4 5 2 8 6 7
p8: 1 2 3 4 5 7 8 6
p9: 1 5 2 3 4 3 6 7 8
p10: 1 4 5 2 3 8 6 7
p11: 1 3 4 5 2 7 8 6
p12: 1 2 3 4 5 6 7 8

Deci raspunsul e 12.


Titlul: Răspuns: 015 Permutari II
Scris de: Andrici Cezar din Martie 05, 2009, 17:25:51
asta am mai vazut pe acest forum dar p si k ce inseamna mai exact?
sau mai bine zimi cum ai facut prima permutare ca poate inteleg asa:D


Titlul: Răspuns: 015 Permutari II
Scris de: Andrei Misarca din Martie 05, 2009, 17:42:11
p reprezinta permutarea, iar k puterea ei
Citat
Pk(i) =
    * P(i), atunci cand k=1
    * P(Pk-1(i)), pentru k > 1
Pt testul 2 de exemplu p2(1) = p(p(1)) = p(2) = 3 :)


Titlul: Răspuns: 015 Permutari II
Scris de: Andrici Cezar din Martie 06, 2009, 09:26:33
aha ms


Titlul: Răspuns: 015 Permutari II
Scris de: Lodoaba Sorin din Aprilie 09, 2009, 11:16:19
poate sa imi spuna cnva ce ins bijectiva:? :idea: [-o&lt; ](*,)


Titlul: Răspuns: 015 Permutari II
Scris de: Gabriel Bitis din Aprilie 09, 2009, 11:22:20
http://airinei.omad.ro/catmate/2FUNCTIA%20PUTERE%20CU%20EXPONENT%20NATURAL.pdf (http://airinei.omad.ro/catmate/2FUNCTIA%20PUTERE%20CU%20EXPONENT%20NATURAL.pdf)

De ce nu cauti pe google? Ai gasi mai multe informatii.  :thumbup:


Titlul: Răspuns: 015 Permutari II
Scris de: Antoche Ioana Alexandra din Octombrie 03, 2009, 20:34:59
Am retinut intr-un vect v nr de poz dupa care se repta elementul i, si daca perioada a mai fost gasita o ignor.Am calculat cmmmc dupa formula: cmmmc=v[1]*...*v[ultimul element]/cmmdc si iau pe majoritatea testelor wa. Am incercat si cu numere mari. Are cineva idee unde busesc sursa?  ](*,)

Ps:Multumesc anticipat!


Titlul: Răspuns: 015 Permutari II
Scris de: Andrei Misarca din Octombrie 04, 2009, 10:55:07
Încearcă să calculezi după o formulă de genul cmmmc(...cmmmc(cmmmc(v[ 1 ], v[ 2 ]), v[ 3 ])... v[ N ]). Pentru că produsul v[ 1 ] * v[ 2 ] * v[ 3 ] * ... * v[ N ] e posibil să iasă din long long.


Titlul: Răspuns: 015 Permutari II
Scris de: FMI - Roscaneanu George din Februarie 22, 2011, 22:36:58
1   0ms   244kb   Corect!   5
2   0ms   8kb   Corect!   5
3   0ms   16kb   Corect!   5
4   0ms   12kb   Corect!   5
5   8ms   12kb   Corect!   5
6   0ms   12kb   Corect!   5
7   0ms   12kb   Corect!   5
8   0ms   12kb   Corect!   5
9   0ms   8kb   Corect!   5
10   4ms   260kb   Corect!   5
11   0ms   8kb   Corect!   5
12   4ms   8kb   Corect!   5
13   4ms   12kb   Corect!   5
14   0ms   8kb   Corect!   5
15   4ms   16kb   Corect!   5
16   0ms   8kb   Corect!   5
17   0ms   12kb   Corect!   5
18   0ms   12kb   Corect!   5
19   4ms   8kb   Corect!   5
20   0ms   8kb   Corect!   5
Punctaj total   100
Moamah ce noroc, cred ca are complexitate O(log n)


Titlul: Răspuns: 015 Permutari II
Scris de: Dumitraiche Marius-Alexandru din Iulie 27, 2011, 12:00:00
Cod:
int valid(int k)
{
for(int j=1;j<=k;j++)
if(p[j]!=j)
return 0;
return 1;
}
int main()
{
f>>n;
for(i=1;i<=n;i++)
f>>p[i];
for(;valid(n)==0;nr++)
{
for(i=1;i<=n;i++)
p[i]=p[p[i]];
}
g<<nr;
g.close();
f.close();
return 0;
}
ma poate ajuta cineva..
nu imi dau seama cu ce am gresit.


Titlul: Răspuns: 015 Permutari II
Scris de: Simoiu Robert din Iulie 27, 2011, 13:09:22
Nu am vazut sursa trimisa, cat ai luat cu ea. Iti da bine pe exemple ?


Titlul: Răspuns: 015 Permutari II
Scris de: Dumitraiche Marius-Alexandru din August 02, 2011, 08:56:58
nici nu am trimis sursa. imi intra in bucla... nu imi da nici un rezultat si nu stiu cum sa fac, nu inteleg greseala.


Titlul: Răspuns: 015 Permutari II
Scris de: UAIC.VlasCatalin din August 14, 2011, 12:25:44
Dati cineva ceva indicii pentru determinarea ciclului fiecarui numar in O ( n ), am citit postul lui Adrian, dar nu-mi dau seama cum pot sa marchez undeva ceva, eu generez toate permutarile pe rind pina cind toate numerele nu s-au repetat cel putin odata, apoi fac cmmmc dintre ciclurile determinate, si astfel iau TLE la testele 1,5 si 10, pls, help :sad:


Titlul: Răspuns: 015 Permutari II
Scris de: Stefan Eniceicu din August 15, 2011, 03:29:34
Edit: Ia un vector binar pana la N pe care il initializezei cu 0. cand ajunge elementul pe pozitia pe care vrei, marchezi in vectorul binar. Daca mai ai nevoie de ajutor PM! O(N)  :wink:
Sper ca n-am zis prea mult sry  :oops:


Titlul: Răspuns: 015 Permutari II
Scris de: UAIC.VlasCatalin din August 15, 2011, 10:01:59
Ms mult Stefan, am prins ideea  :yahoo:


Titlul: Răspuns: 015 Permutari II
Scris de: Mihai Visuian din Octombrie 14, 2011, 17:31:10
nu inteleg la al treilea exemplu... care sunt permutarile


Titlul: Răspuns: 015 Permutari II
Scris de: Simoiu Robert din Octombrie 14, 2011, 21:25:05
FA ca la mate pe foaie si o sa vezi :).


Titlul: Răspuns: 015 Permutari II
Scris de: Gabriel Bitis din Octombrie 14, 2011, 21:51:48
p1: 1 5 2 3 4 8 6 7 
p2: 1 4 5 2 3 7 8 6
p3: 1 3 4 5 2 6 7 8
p4: 1 2 3 4 5 8 6 7
p5: 1 5 2 3 4 7 8 6
p6: 1 4 5 2 3 6 7 8
p7: 1 3 4 5 2 8 6 7
p8: 1 2 3 4 5 7 8 6
p9: 1 5 2 3 4 3 6 7 8
p10: 1 4 5 2 3 8 6 7
p11: 1 3 4 5 2 7 8 6
p12: 1 2 3 4 5 6 7 8

Deci raspunsul e 12.

E bine sa citesti prima data ce s'a mai postat pe un anumit subiect, poate nu mai e nevoie sa intrebi. :)


Titlul: Răspuns: 015 Permutari II
Scris de: Alexandru Marian Alexandru din Februarie 29, 2012, 00:57:14
Salut tuturor , stiu ca e cam tarziu sa discut despre aceasta problema , dar nu pot intelege dc scot decat 90 puncte si  nu inteleg ce pot sa mai fac.. am observat ciclul pe ex 3 , am facut asa si nu imi da 100.. imi da ca am depasit limita de timp la test 1 si test 10.. am calculat gradele si le-am pus intr-un vector. si am facut cmmmc apoi.. aveti vreun sfat?


Titlul: Răspuns: 015 Permutari II
Scris de: Adrian Dinu din Martie 25, 2012, 17:41:50
 ](*,) va rog vrumos explicati-mi si mie ce vrea enuntul asta de la mine, nu inteleg deloc.
spune la exemplul 1 ca solutia este k=1 iar in enunt spune ca Pk(i) = p(i) pentru ca k=1, deci rezulta p(1)=2; p(2)=3; p(3)=4... nu inteleg nimic


Titlul: Răspuns: 015 Permutari II
Scris de: Barbu Dorel din Iulie 08, 2012, 12:02:19
Salut! Sunt nou aici. Am incercat si eu sa rezolv aceasta problema. Rezolvarea am gasit-o singur, insa am probleme cu implementarea. Pe sursa mea obtin 30 pct. Am mers pe urmatoarea idee. Am creat un vector vp, in care vp retine o valoare, care arata la cate repetitii apare cifra i pe pozitia i. Dupa care am facut cmmc-ul tuturor valorilor din acest vector. Sunt constient ca implementarea mea, nu este cea mai buna ( si este departe de a o putea numi  macar "buna"), si de aceea va cer ajutorul.
Cod:
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
int n;
int v[100000],v2[10000],vp[100000];
void citeste()
{
    freopen("perm2.in","r",stdin);
    scanf("%d",&n);
    int i;
    for(i=1; i<=n; i++) scanf("%d",&v[i]);
}
int completeaza(int k,int i)
{
    if(k==1) return v[i];
    else return v[completeaza(k-1,i)];
}
bool verifica(int j)
{
    if(v2[j]!=j) return false;
    return true;
}
int cmmdc(int a, int b)
{
    int c;
    while (b)
    {
        c=a%b;
        a=b;
        b=c;
    }
    return a;
}
int calculeazacmmmc()
{
    int a=1,b=1,m,cmmc,i;
    a=vp[1];
    b=vp[2];
    m=cmmdc(a,b);
    cmmc=a*b/m;
    a=cmmc;

    for(i=3; i<=n; i++)
    {
        b=vp[i];
        m=cmmdc(a,b);
        cmmc=a*b/m;
        a=cmmc;
    }

    return cmmc;
}

int main()
{
    ofstream out("perm2.out");
    citeste();
    int i=0,j,a=1,b=1,nrc;
    j=n+1;
    for(j=1; j<=n; j++)
    {
        while(verifica(j)==false)
        {
            i++;
            v2[j]=completeaza(i,j);
        }
        vp[j]=i;
        i=0;
    }

    out<<calculeazacmmmc();
    return 0;

}

M-ati putea ajuta, va rog? Multumesc anticipat!


Titlul: Răspuns: 015 Permutari II
Scris de: Dan H Alexandru din Iulie 09, 2012, 10:21:27
La tine nu implementarea este problema , ci ideea de rezolvare.  Algoritmul tau lucreaza prea incet pentru ca faci de mai multe ori acelasi lucru. Ia un sir in care cand ajunge elementul pe pozitia pe care vrei il marchezi. Succes !  :thumbup:


Titlul: Răspuns: 015 Permutari II
Scris de: Barbu Dorel din Iulie 09, 2012, 11:22:04
Deci, prin secventa asta de cod, nu fac ceea ce ai zis tu?:
Cod:
 for(j=1; j<=n; j++)
    {
        while(verifica(j)==false)
        {
            i++;
            v2[j]=completeaza(i,j);
        }
        vp[j]=i;
        i=0;
    }

Adica, de ce fac de prea multe ori acelasi lucru? Trec prin fiecare pozitie, o data, pentru a plasa acolo elementul corespunzator. La sfarsit calculez cmmc-ul. Scuza-ma, dar cred (sunt aproape sigur), ca nu am inteles prea bine ce ai vrut sa spui. Ai putea, te rog, sa fii putin mai detaliat (nu vreau mura in gura!!!)? Multumesc!


Titlul: Răspuns: 015 Permutari II
Scris de: Stanescu Jean Alexandru din Octombrie 23, 2012, 09:06:54
Killed by signal 11(SIGSEGV). la toate testele.


Titlul: Răspuns: 015 Permutari II
Scris de: Pirtoaca George Sebastian din Octombrie 23, 2012, 09:16:17
Declara tablourile in afara main-ului. Succes!  :ok:


Titlul: Răspuns: 015 Permutari II
Scris de: Stanescu Jean Alexandru din Octombrie 23, 2012, 09:38:21
Eu am declarat vectorii asa:
int n;  fin>>n;
int v[2][n],k[n/2+3];
pt ca sa mananc cat mai putin spatiu. Daca ar fi sa ii declar in afara main ar trebui sa le dau 20000, respectiv v[2][20000] (1 rand pentru permutare si 1 pentru verificare/marcare) si k[10000] (pt a pune lungimea ciclilor in el).


Titlul: Răspuns: 015 Permutari II
Scris de: Pirtoaca George Sebastian din Octombrie 23, 2012, 09:45:44
Asa ii declari. Compilatorul oricum calculeaza doar cat folosesti. Deci, nu pierzi memorie. :ok:


Titlul: Câţi? 15! Ce 15? Ce câţi?
Scris de: Soucup Nicolae Silviu din Noiembrie 07, 2012, 04:49:31
Câţi? 15! Ce 15? Ce câţi?

perm2.in
21
12 3 16 5 19 8 21 14 18 10 4 17 1 11 2 20 6 13 7 15 9

perm2.out
15

46 de linii de cod -> punctaj total: 100  :thumbup:


Titlul: Răspuns: 015 Permutari II
Scris de: Bot Cristian Daniel din Februarie 20, 2013, 14:39:13
+1 pentru ideea lui DITzoneC


Titlul: Răspuns: 015 Permutari II
Scris de: Barbu Dorel din August 18, 2013, 13:28:17
Ar  putea cineva sa detalieze putin chichita? Cunosc notiunea de ciclu al unei permutari. Am reusit sa obtin 80 de puncte, intelegand ca algoritmul meu era infeicient, si imbunatatindu-l, facand cateva mici retusuri. Dar pic testele 1,5,10,12. Ma poate ajuta cineva?


Titlul: Răspuns: 015 Permutari II
Scris de: Campeanu Vlad din August 18, 2013, 19:41:54
Tu in functia in care completezi matricea gasesti pentru fiecare element i un numar c[ i ] astfel incat permutarea la puterea c[ i ] sa aiba elementul i pe pozitia corespunzatoare. Nu e necesar sa verifici la toate pentru ca ciclul unei permutari iti da pentru toate elementele care-l alcatuiesc acel c[ i ]. Daca ai de exemplu ciclul (1, 3, 4) ridicand la putere vei avea 1 -> 3 -> 4 -> 1 deci {1, 3, 4} vor fi pe pozitiile 1, 3 si 4 in p^3, p^6 etc.


Titlul: Răspuns: 015 Permutari II
Scris de: Barbu Dorel din August 18, 2013, 20:39:31
Iti multumesc frumos pentru ajutor! Am reusit si eu sa iau 100 de puncte. Multumesc din nou! Spor la rezolvat!


Titlul: Răspuns: 015 Permutari II
Scris de: Bejenariu Ionut Daniel din Septembrie 16, 2015, 10:27:06
imi poate spune cineva cum sa calculez vectorul de permutari necesare ca sa se ajunga intr-o pozitie


Titlul: Răspuns: 015 Permutari II
Scris de: mihai craciun din Aprilie 09, 2017, 12:36:25
Ideea este sa imparti numerele in mai multe cicluri de permutari, periodicitatea fiecarui numar fiind chiar dimensiunea fiecarui ciclu.