infoarena

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



Titlul: 005 Permutari
Scris de: Dan-Leonard Crestez din Martie 08, 2004, 19:54:43
Aici puteţi discuta despre problema Permutari (http://infoarena.ro/problema/perm).


Titlul: 005 Permutari
Scris de: Constantin Cristian din Martie 12, 2005, 13:05:36
Am demonstrat ca rezultatul este de fapt numarul lui Stirling

de speta intai |s(N,K)|, unde N si K sunt numerele din problema.

Am determinat s(N,K) cu formula de recurenta:
s(N,K) = (N-1)s(N-1,K) + s(N-1, K-1).
   Desi atat formula cat si calcularea ei recursiva mi se par

corecte ( sunt demonstrate in "Probleme de combinatorica si teoria

grafurilor" de Ioan Tomescu, Editura Didactica si Pedagogica,

1981, pag. 51) sursa mea este evaluata la 10 puncte.
  De ce?


Titlul: 005 Permutari
Scris de: Gogu Marian din Martie 12, 2005, 14:37:23
tu ai bagat operatii pe numere mari? :D


Titlul: 005 Permutari
Scris de: VladS din Martie 12, 2005, 15:54:07
Ce primesti Wrong Answer sau Time limit exceeded?

Ce numar stirling ai folosit? Primul sau al doilea?
Poate exista o formula nerecurenta, ca la combinari, care se poate calcula mai usor. :roll:


Titlul: 005 Permutari
Scris de: VladS din Martie 12, 2005, 15:57:32
Apropo, stie cineva de unde imi pot cumpara I. Tomescu "Probleme de combinatorica si teoria grafurilor?". Exista vreo editie mai noua? Din cate stiu eu cartea e antica.


Titlul: 005 Permutari
Scris de: Bogdan-Cristian Tataroiu din Martie 12, 2005, 18:13:02
Tu esti sigur ca ai dem bine? Din cate am facut eu pe foaie nu e bine. M-am uitat pe http://mathworld.wolfram.com/StirlingNumberoftheSecondKind.html sa vad exact ce sunt numerele lui Sterling.
De ex pt 3 rezultatele ar fi 2, 3 si 1 (nu 1,3 si 1), iar pt 4 sunt 6,11,6 si 1, nu(1,7,6,1). Asta dc am inteles bine problema.


Titlul: 005 Permutari
Scris de: Constantin Cristian din Martie 12, 2005, 21:23:51
Am sa raspund la toate mesajele:
1. am implementat operatii pe numere mari de pana la 500 de cifre

(iar din calculele mele cel mai mare numar se obtine pentru 200 si 2 sau 200 si 3 si nu are decat 370 si ceva de cifre, un pic mai mult decat 200!).
2. folosesc primul numar al lui stirling, primesc "Wrong answer"

iar tmpul de executie este sub 0.05 sec (pt N=200).
3. pt Bogdan2412: ce ai gasit tu este nr lui Stirling de speta a

doua, care este cu totul altceva. Si am inteles bine problema. Pt n = 5, obtin 24, 50, 35 (ca in exemplul din problema), 10 si 1. Nu-i asa?

Acesta e textul problemei din "Probleme de combinatorica si teoria
grafurilor":
12.15 Demonstrati ca numarul permutarilor p ale multimii {1,2,...,n} care au proprietatea ca exista exact k elemente j pentru care p(j)>p(i) pentru orice i<j este egal cu |s(n,k)|.


|s(n,k)| numarul lui Stirling de speta intai si este egal cu coeficientul lui x^k din dezvoltarea: x(x+1)(x+2)...(x+n-1).


Daca doreste cineva am sa pun pe forum si demonstratia lui Ioan Tomescu.


Titlul: 005 Permutari
Scris de: Constantin Cristian din Martie 13, 2005, 01:12:36
Poate ma ajuta cineva care a luat maxim la problema asta.

Am rulat cateva teste:
1. N=13; K=8; Am obtinut sol = 1095154;
2. N=17; K=4; Am obtinut sol = 87077748875904;
2. N=70; K=45; Am obtinut
 sol = 26269688897329413126924403900781315211553781164470;

Va da si voua la fel?


Titlul: 005 Permutari
Scris de: Mircea Pasoi din Martie 13, 2005, 13:07:09
Citat din mesajul lui: stifmeister
Poate ma ajuta cineva care a luat maxim la problema asta.

Am rulat cateva teste:
1. N=13; K=8; Am obtinut sol = 1095154;
2. N=17; K=4; Am obtinut sol = 87077748875904;
2. N=70; K=45; Am obtinut
 sol = 26269688897329413126924403900781315211553781164470;

Va da si voua la fel?


Pentru primul raspunsul este 6926634
Pentru al doilea este 87077748875904 (aici iti da bine)
Iar pentru al treilea imi da 328693139125599643512870879273574455866682562802025734100


Titlul: 005 Permutari
Scris de: Manolache Adrian din Martie 13, 2005, 13:08:06
Cel mai probabil ai gresit la implementarea operatiilor cu numere mari,
Daca foloseai int64 obtineai 40p.
Rezultatul pentru n=13 si k=8 este 6926634.


Titlul: 005 Permutari
Scris de: Bogdan-Cristian Tataroiu din Martie 13, 2005, 16:26:59
@stifmeister: scuze... oricum, probabil ai gresit ceva la calcularea numerelor mari.

Eu am facut problema, dar la 9/10 teste am primit "RUN ERROR - Invalid memory reference". Am facut o clasa cu numere mari, reprezentarea unui numar mare am facut-o pe un vector int de 1001. Am folosit doi vectori de tip numar mare de dim 201 pt calcularea solutiei. Am verificat problema acasa pe 200 2 si 200 100 si 200 199 si nu am primit nici un mesaj Segmentation Fault... Ma poate ajuta cineva?


Titlul: 005 Permutari
Scris de: Constantin Cristian din Martie 13, 2005, 22:40:36
Va multumesc, am rezolvat problema si am luat 100p. Formula era buna dar am gresit la

implementarea adunarii numerelor. Era un caz particular si de-aia nu m-am prins repede unde

am gresit.


Titlul: 005 Permutari
Scris de: Lucescu Andrei Bogdan din Decembrie 15, 2005, 17:32:59
am facut si eu problema bazat pe aceeasi formula de recurenta , am facut si pe numere mari si pe mici , si tot iau 40 puncte , tot imi iese din timp , cand intra in recurenta cu k mare trebuie sa astept mult
Voi ce conditii de iesire aiti folosit??
eu pt n=k am gasit sa stir=1 si pt k=1 am gasit k=1 stir=(n-1)!
da in ritmu asta progrmu mere greu poate am ratat eu o chesti asa ca pls help

nu mai conteaza am gasit solutia , eu am facut o implementare simpla si directa si aceeasi valoare era calculata de f multe ori , am modificat algoritmul astfel incat sa se retina valorile obtinute si sa se refeoloseasca cand e nevoie am luat 100 p

[edited by svalentin] posts merged; nu mai postati dublu! daca aveti ceva de adaugat folositi "edit"!!


Titlul: Raspuns: 005 Permutari
Scris de: Andrei Homorodean din Februarie 08, 2007, 20:54:28
Folosesc numere mari, dar iau 60, pe 4 teste iau tle.. Am optimizat cat am putut, dar nu-mi dau seama ce s-ar mai putea face.. Aceasta este implementarea pe numere mari....

Cod:
void aduna(int j, int b)
{
int i, t;

for(i = 1, t = 0; i <= old[j-1][0]  || i <= old[j][0]  ||  t  ||  i <= curent[j][0]; ++i, t /= 10)
curent[j][i] = (t += old[j][i]*b + curent[j][i] + old[j-1][i]) % 10;

curent[j][0] = i-1;
}

old e linia anterioara, curent e linia curenta...

Sugestii?


Titlul: Raspuns: 005 Permutari
Scris de: Bogdan-Cristian Tataroiu din Februarie 08, 2007, 21:00:48
Poti incerca sa folosesti baza 10000 sau 10^6 pentru numere.


Titlul: Raspuns: 005 Permutari
Scris de: Andrei Homorodean din Februarie 08, 2007, 21:34:44
ok, am sa incerc, multumesc!


Later edit:
Ok, am gasit ce nu faceam bine... eu la fiecare pas puneam 'curent' pe 0... ceea ce era.... oricum, am sa incerc si varianta cu baza, pare interesant...


Titlul: Răspuns: 005 Permutari
Scris de: Cotletz Ovidiu din Februarie 26, 2007, 21:00:22
 Nu stiu daca am inteles prea bine problema .  Nu  posteaza cineva sirurile de lungime 3 cu 2 maxime ?


Titlul: Răspuns: 005 Permutari
Scris de: Savin Tiberiu din Februarie 26, 2007, 21:14:24
231
132
213


Titlul: Răspuns: 005 Permutari
Scris de: Eros Lorand din Martie 17, 2007, 21:37:31
Poate sa-mi scrie cineva daca a facut 100 ... cat e timpul la testul 5 si 8?
Eu la testul 5 totdeauna am TLE  ](*,) ... si la testul 8 da 300 ms :P hlp pls (sry bad roman)


Titlul: Răspuns: 005 Permutari
Scris de: Paul-Dan Baltescu din Martie 18, 2007, 09:17:46
Limita de timp pe toate testele este de 0.3 s [sau 300 ms]. Testele nu sunt neaparat ordonate in ordinea dificultatii. Oricum, mai optimizeaza. :)


Titlul: Răspuns: 005 Permutari
Scris de: Eros Lorand din Martie 18, 2007, 10:11:14
Stiu ca limita de timp e 0.3 ms dar vreau sa stiu timpul la testul 5 cine a facut 100, pentur ca daca e foarte mica (20-80 ms) atuci nu n sau k e mare ci am o problema in program cu numerele mici. #-o..la testul 8 am primit eu 300 ms exact cat trebuie de aceea am 90 puncte...Si poti sa-mi dai niste idee de optimizare?


Titlul: Răspuns: 005 Permutari
Scris de: Paul-Dan Baltescu din Martie 18, 2007, 10:22:29
Ti-as zice ce timpi am pe testul respectiv, dar sursa am trimis-o pe infoarena 1. Ca optimizari ai putea sa calculezi numerele mari intr-o baza mai mare (gen 10000) si sa nu calculezi toate starile din dinamica, ci doar alea de care ai nevoie pentru a obtine rezultatul.


Titlul: Răspuns: 005 Permutari
Scris de: Stefan Istrate din Martie 18, 2007, 10:38:21
Pe testul 5 sursa mea ruleaza in 288ms, iar pe testul 8 ruleaza in 252ms :)


Titlul: Răspuns: 005 Permutari
Scris de: Savin Tiberiu din Martie 18, 2007, 10:49:22
si mie mi-a intrat cam cu aceeasi timpi aproximativ folosind baza 10.


Titlul: Răspuns: 005 Permutari
Scris de: Eros Lorand din Martie 18, 2007, 15:47:33
Da nu calculez nici unu in plus (asa a fost) dar am incercat baza 10^4 si am resuit!!! :yahoo:
Acum timpul la testul 5 e 72 ms  :D ... Thx  :ok:


Titlul: Răspuns: 005 Permutari
Scris de: Pandia Gheorghe din Martie 29, 2007, 15:44:15
Nu pricep. Aplic formula, calculez recursiv si folosesc int64. Normal daca da pe afara cred ar trebui sa dea un fel de eroare sau sa devina valorile negative dar imi da TLE. Folosind operatii pe numere mari nu ar dura si mai mult ?


Titlul: Răspuns: 005 Permutari
Scris de: Airinei Adrian din Martie 29, 2007, 15:47:36
Recursivitatea e mai inceata.


Titlul: Răspuns: 005 Permutari
Scris de: Pandia Gheorghe din Martie 29, 2007, 21:08:19
Am facut in baza 10^4 si am luat 100p.  :yahoo: Super problema, chiar am avut de invatat niste cazuri particulare in la operatiile cu numere mari. Eu programator inrait pe borland a trebuit sa fac multe schimbari pe agoritm sa functioneze de 100 in fpc. Oricum, multumesc mult pentru sfaturi!


Titlul: Răspuns: 005 Permutari
Scris de: nash mit din Aprilie 14, 2007, 00:29:39
 ok .. ceva nu imi iese mie .. bine si nu vad unde gresesc ... :|
     Eu gandesc in felul urmator  :
       folosesc o matrice sol[ i ][ j ] care reprezinta numarul de permutari cu "i" elemente care au "j" maxime . O permutare cu "n" elemente si "k" maxime se poate forma din :
                    - o permutare cu "n-1" elemente si "k-1" maxime prin adaugarea elementului "n" la sfarsitul permutarii .
                    - o permutare cu "n-1" elemente cu "k" maxime prin adaugarea elementului "n" inaintea ultimului maxim.
                    - o permutare cu "n-1" elemente cu "k+1" maxime prin adaugarea elementului "n" inaintea ultimelor doua maxime .
             ....................................
             ....................................
                   - o permutare cu "n-1" elemente cu "n-1" maxime prin adaugarea elementului "n" dupa primele "k" elemente din permutare .

       De aici rezulta ca numarul de permutari cu N elemente si K maxime se calculeaza in felul urmator :

sol[ n ][ k ] = sol[ n-1 ][ k-1 ] + sol[ n-1 ][ k ] + sol[ n-1 ][ k+1 ] + ... +sol[ n-1 ][ n-1] 
initial sol[ 1 ][ 1 ] = 1

Calculand in felul acesta nu se ajunge la rezultatul corect .

1
1 1
2 2 1
......
in loc de al doilea 2 corect era "3" .. ( se poate vedea ca e si exemplu dat ...) nu vad unde gresesc .. evident .. nu va merge pentru teste mari .. insa .. nu vad unde gresesc .. :| ( ma refer la ideea de rezolvare )

   Nu poate nimeni sa imi dea nici un sfat .. sau toti cei care pot sunt la baraj pentru lot ??   :-k 
 :winner1:
 :roll:


Titlul: Răspuns: 005 Permutari
Scris de: Bondane Cosmin din Aprilie 15, 2007, 15:06:22
Ai gresit recurenta.
Defapt problema cere sa determini numarul lui Stirling de speta intai.
s(N,K) = (N-1)s(N-1,K) + s(N-1, K-1).


Titlul: Răspuns: 005 Permutari
Scris de: nash mit din Aprilie 15, 2007, 19:23:08
 Am vazut ca au afisat cineva la inceputul topicului striling de speta 1 ... insa .. eu vream sa stiu ce e gresit in gandirea mea ....


Titlul: Răspuns: 005 Permutari
Scris de: Paul-Dan Baltescu din Aprilie 15, 2007, 22:11:40
Tu pentru k+p maxime te gandesti ca poti introduce elementul N inainte de ultimele p-1 maxime. Problema este ca s-ar putea sa ai mai multe locuri in care sa-l poti introduce.

Uite un exemplu:

3 2 1 4 5

Vrei sa obtii doua maxime cand bagi pe 6 si poti obtine:

3 6 2 1 4 5
3 2 6 1 4 5
3 2 1 6 4 5

In recurenta ta, aduni o singura data.


Titlul: Răspuns: 005 Permutari
Scris de: nash mit din Aprilie 15, 2007, 22:56:28
  Ah da .. corect .. nu m-am gandit la asta :) merci ..


Titlul: Răspuns: 005 Permutari
Scris de: Stan Alexandru Dan din Aprilie 29, 2007, 03:43:55
Am si eu o problema ... fac problema prin numerele lui stirling, afisez cu numere marisi totusi imi da WA la 4 teste, am incercat cu 10^4 afisarea pana la 10^9... tot 4 teste gresite imi da, dar culmea culmilor este k testele gresite nu coincid knd schimb baza de afisare  ](*,)... poate cineva sa-mi spuna care-i faza  :-s


Titlul: Răspuns: 005 Permutari
Scris de: Stefan Istrate din Aprilie 29, 2007, 08:25:45
Ai grija cand folosesti o baza mai mare ca 10 sa afisezi si zerourile. De exemplu, daca folosesti baza 10^4, numarul 73 trebuie afisat ca 0073.


Titlul: Răspuns: 005 Permutari
Scris de: Stan Alexandru Dan din Aprilie 30, 2007, 03:50:28
Ms mult pentru observatie... am luat si eu suta  :banana:


Titlul: Răspuns: 005 Permutari
Scris de: Bondane Cosmin din Iulie 11, 2007, 23:52:59
Cat va da pentru :

Cod:
200 2

Cred ca asta ii cel mai mare rezultat care se poate obtine.


Titlul: Răspuns: 005 Permutari
Scris de: Stefan Istrate din Iulie 11, 2007, 23:59:52
Cod:
23159060312564359871950929055455674021435236167923959343115750040823047581979908380727537796461185778013737134426559431288744237478343902437539133012028435084567718670531340662889488184573823549876303454548719715122034588710323516710029845203752585692844797698070034630498657231556170312181971812010087147350420585907013230054604800000000000000000000000000000000000000000000


Titlul: Răspuns: 005 Permutari
Scris de: speedzeal din Aprilie 17, 2008, 17:23:14
Cum as mai putea sa-mi optimizez solutia ca sa iasa in timp?
http://infoarena.ro/job_detail/164223


Titlul: Răspuns: 005 Permutari
Scris de: Bogdan-Alexandru Stoica din Aprilie 17, 2008, 18:10:26
foloseste baza 10000 pentru numerele mari. ai grija la afisare.


Titlul: Răspuns: 005 Permutari
Scris de: Savin Tiberiu din Aprilie 17, 2008, 18:11:37
el ia 9 tleuri deci probabil ca face back. Nu cred ca il ajuta sa mareasca baza la numere. Incearca sa te gandesti la alta abordare.


Titlul: Răspuns: 005 Permutari
Scris de: Gabriel Bitis din Aprilie 17, 2008, 18:18:10
E greu sa dai indicatii daca nu stii ce e in sursa aia... Alex, descrie putin ce faci acolo.
Dupa numarul de teste care depasesc timpul, probabil Devilkind are dreptate : incearca altceva.


Titlul: Răspuns: 005 Permutari
Scris de: speedzeal din Aprilie 18, 2008, 16:57:50
E greu sa dai indicatii daca nu stii ce e in sursa aia... Alex, descrie putin ce faci acolo.
Dupa numarul de teste care depasesc timpul, probabil Devilkind are dreptate : incearca altceva.
Generez toate permutarile si dupa aceea verific cate maxime are....daka are k maxime afisez solutia...


Titlul: Răspuns: 005 Permutari
Scris de: Stefan Istrate din Aprilie 18, 2008, 17:34:05
Cauta o solutie mai eficienta. :) Iar daca nu te prinzi, citeste cu atentie posturile anterioare din topicul asta.


Titlul: Răspuns: 005 Permutari
Scris de: theratman din Iunie 20, 2008, 07:54:42
am si eu o problema
am facut functia de stirling pe nr mici
folosind formula
s(n,k)=(n-1)*s(n-1,k)+s(n-1,k-1)
si la testul n=5 si k=3 imi da 34 si nu 35
ma poate ajuta cineva va rog


Titlul: Răspuns: 005 Permutari
Scris de: Iacob Eduard din Octombrie 21, 2008, 10:44:51
Va rog scrieti demonstratia,ca eu nu am inteles de ce solutia acestei probleme e formula asta:s(N,K) = (N-1)s(N-1,K) + s(N-1, K-1).


Titlul: Răspuns: 005 Permutari
Scris de: Stefan Gheorghe din Noiembrie 04, 2008, 14:45:19
vreau si eu sa va intreb ceva... am facut sirul stirling... dar din pacate iau decat un test din toate... testul 6 mai precis.... puteti sa imi dati testul 1 sau 2 sa vad care e problema?

Cod:
s[1,1]:=1;  s[2,1]:=1; s[2,2]:=1;
for i:=3 to n do
begin
s[i,1]:=1;
for j:=2 to i-1 do
s[i,j]:=j*s[i-1,j]+s[i-1,j-1];
s[i,i]:=1;
end;

 Editat de moderator: Foloseste tag-ul code cand postezi cod!

sigur sunt testele bune? sirul stirling arata pentru 5 3 varianta 25...

 Editat de moderator: Nu posta in continuu, ci editeaza mesajele precedente daca sunt pe aceeasi tema.


Titlul: Răspuns: 005 Permutari
Scris de: Paul-Dan Baltescu din Noiembrie 04, 2008, 15:16:28
Testele sunt bune. Nu ti se pare ciudat ca au luat si altii 100, daca testele sunt gresite?

Mai sunt pe acest topic cateva teste, le-ai incercat?


Titlul: Răspuns: 005 Permutari
Scris de: Andrei Grigorean din Noiembrie 04, 2008, 17:10:15
Ghitza, tu ai inteles problema... sau ai citit pe forum ca se face cu Stirling si ai cautat pe google relatia de recurenta?


Titlul: Răspuns: 005 Permutari
Scris de: Stefan Gheorghe din Noiembrie 11, 2008, 14:04:42
am citit pe forum;)) si nu imi da ceva bine... dar nu inteleg, cum s-ar putea face?


Titlul: Răspuns: 005 Permutari
Scris de: Andrei Grigorean din Noiembrie 11, 2008, 15:57:54
Pai tu ai implementat numerele lui Stirling gresite ;). Cauta pe wikipedia si vei vedea ca exista atat numerele lui Stirling de speta I, cat si de speta a II-a (au semnificatii, recurente, respectiv valori diferite)


Titlul: Răspuns: 005 Permutari
Scris de: Taloi Bogdan Cristian din Martie 31, 2009, 20:07:18
 :eyebrow: Nu stiu cum ati reusit sa faceti de 200 si ceva de ms...mie, la testu 5 :evil: imi ia 53 ms si la 10 imi ia cel mai mult :winner1:->84 ms \:D/


Titlul: Răspuns: 005 Permutari
Scris de: Dragos din Ianuarie 18, 2010, 13:23:25
la fel cum a mai spus inanitea mea si eddy, poate cineva sa puna si demonstratia ca solutia este numarul stirling de speta I, cred ca nu este  prea evident ca asa este chiar daca merge...


Titlul: Răspuns: 005 Permutari
Scris de: Andrei Misarca din Ianuarie 18, 2010, 14:06:26
Mai bine îți găsești singur dinamica, decât să cauți de ce sunt numerele lui Stirling sau ale nu știu cui. Așa ai șanse și să înveți ceva din ea.


Titlul: Răspuns: 005 Permutari
Scris de: Cicu Mihai din Februarie 01, 2010, 17:53:10
Ok. sunt incepator dar totusi... cum scriu eu sirul de numere care rezulta din 200 2 de exemplu ?!
Ca nu vad niciun tip de variabila care sa salveze siruri asa de lungi.
Si mai sunt si pascal  :oops:


Titlul: Răspuns: 005 Permutari
Scris de: Paul-Dan Baltescu din Februarie 01, 2010, 18:18:43
Trebuie sa reprezinti numerele ca siruri (vectori) de cifre si trebuie sa implementezi "de mana" operatiile de care ai nevoie (aduname, inmultire, etc.). Poti sa consulti sectiunea "Numere mari" din acest articol (http://infoarena.ro/multe-smenuri-de-programare-in-cc-si-nu-numai) ca sa-ti faci o idee (desi explicatiile sunt in C, poate reusesti sa transpui codul in Pascal).


Titlul: Răspuns: 005 Permutari
Scris de: Cont de teste din Februarie 14, 2010, 11:59:42
Salut!
Vreau si eu niste ajutor pentru ca nu inteleg cum sa ajung la relatia de la numere stirling.
Uitati cum gandesc eu si va rog frumos sa-mi dati indicatii unde gresesc(daca gresesc) si ce are trebui sa fac sa ajung la recurecta respectiva.
a[n][k] ->numarul de permutari  de n elemente din multimea {1,2,3...n} cu k maxime

este suma din:
       -a[n-1][k-1]*(n-pozitia ultimului maxim) pentru ca putem adauga pe n dupa ultimul maxim si vom avea k maxime <=> daca avem {maxim , e1, e2, e3} avem 4 pozitii(pozitia lui e3 este n-1 iar a lui maxim n-4) in care putem pune pe n (in locul celor 3 virgule sau dupa e3)
       -a[n-1][k]*(pozitia ultimului maxim-pozitia penultimului maxim) pentru n va "bloca" orice maxim care se afla dupa el iar numarul de maxime va ramane k <=>daca avem{maxim1, e1, e2, e3, maxim2} atunci putem pune pe n in locul celor 4 virgule (poz[maxim1]=poz[maxim2-4])
       
       - a[n-1][k+1]*(pozitia[penultim]-pozitie[antepenultim] ) pentru n trebuie sa blocheze 2 maxime deci trebuie pus intre antepenultimul si penultimul maxim
        ...
        -a[ i ][j]*(poz[al k-lea maxim]- poz[al k-1-lea maxim]
         ...
       -a[n-1][n-1]*(poz[al k-lea maxim]-poz[al k-1-lea maixim] =1 putem pune intr-un singur loc al n-lea element

Va rog mult sa ma ajutati.


Titlul: Răspuns: 005 Permutari
Scris de: Paul-Dan Baltescu din Februarie 14, 2010, 15:22:53
Rezolvarea ta nu e buna pentru ca nu stii pozitiile maximelor.

O problema asemanatoare cu aceasta este problema doipe (http://infoarena.ro/problema/doipe), care are solutia explicata intr-un articol (http://infoarena.ro/winter-challenge-1/solutii). Poti sa cauti acolo indicii despre abordarea acestui tip de probleme.


Titlul: Răspuns: 005 Permutari
Scris de: George Popoiu din Aprilie 04, 2010, 08:58:26
Imi puteti explica si mie recurenta de la numarul lui Stirling de speta I ? Chiar nu am reusit sa o pricep.


Titlul: Răspuns: 005 Permutari
Scris de: Ilie Ionut din Aprilie 04, 2010, 19:52:35
Ideea e ca permutarile de lungime N se obtin prin introducerea lui N, pe rand, pe toate pozitiile, in fiecare permutare de lungime N-1. Sa zicem ca il asezam pe N pe pozitia i (i=1,n). Cum N e numarul maxim, el nu are niciun numar mai mare in stanga, deci determina o maxima. In dreapta lui N nu va fi niciun numar mai mare decat N, ceea ce inseamna ca N e cel mai din dreapta numar cu aceasta proprietate. Cum noi vrem ca permutarea sa aiba K maxime, trebuie ca in stanga lui N (pe pozitiile 1..i-1) sa avem niste numere ce alcatuiesc K-1 maxime. Noi cunoastem S(i-1,k-1), adica numarul de permutari ale multimii {1, 2, … , i-1} cu K-1 maxime. Pentru fiecare astfel de permutare, numerele respective pot fi inlocuite cu oricare i-1 valori care sa respecte relatiile de ordine, iar sirul va avea tot atatea maxime. De exemplu, sirul 2, 1, 3 are 2 maxime. Valorile 1, 2, 3 ar putea fi inlocuite cu alte valori, sa zicem 4, 7, 22, iar sirul 7, 4, 22 va avea tot 2 maxime. Noi trebuie sa completam primele i-1 pozitii cu numere din multimea {1, 2, …, N-1}. Oricare i-1 numere din aceasta multime pot respecta relatiile de ordine care vor duce la existenta a K-1 maxime, deci modul de a completa primele i-1 pozitii e C(n-1,i-1)*S(i-1,k-1). Pentru fiecare i numere fixate la inceput, toate celelalte numere de la 1 la N care au ramas vor completa ultimele N-i pozitii, numarul de posibilitati fiind P(N-i). Deci daca N e pus pe pozitia i, exista C(n-1,i-1)*S(i-1,k-1)*P(N-i) posibilitati, adica (n-1)!/((i-1)!*(n-i)!)*S(i-1,k-1)*(n-i)!=(n-1)!/(i-1)!*S(i-1,k-1)=i(i+1)(i+2)…(n-1)*S(i-1,k-1). Raspunsul problemei se obtine dandu-i lui i toate valorile de la 1 la N, adica vom avea S(n,k)=1*2*…*(n-1)*S(0,k-1)+2*3*…*(n-1)*S(1,k-1)+…+(n-1)*S(n-2,k-1)+S(n-1,k-1)
Pentru forma recurenta, se da (n-1) factor comun:
S(n,k)=(n-1)[1*2*…*(n-2)*S(0,k-1)+2*3*…*(n-2)*S(1,k-1)+…+S(n-2,k-1)]+S(n-1,k-1)=(n-1)*S(n-1,k)+S(n-1,k-1).


Titlul: Răspuns: 005 Permutari
Scris de: Alexandru-Iancu Caragicu din Noiembrie 28, 2010, 14:47:50
Daca problema asta se face cu numere mari, de ce nu sunt numere mari la indicii?


Titlul: Răspuns: 005 Permutari
Scris de: Simoiu Robert din Noiembrie 28, 2010, 14:52:09
In primul rand nu cred ca exista un tag cu numere mari, in al doiela rand ar trebuie facut unul ....  \:D/


Titlul: Răspuns: 005 Permutari
Scris de: Alexandru-Iancu Caragicu din Noiembrie 28, 2010, 17:09:07
In primul rand nu cred ca exista un tag cu numere mari, in al doiela rand ar trebuie facut unul ....  \:D/

http://infoarena.ro/cauta-probleme?tag_id%5B%5D=104 (http://infoarena.ro/cauta-probleme?tag_id%5B%5D=104)

_____________

Ce e gdb.exe? Pt ca imi crapa in timpul debug-ului, apoi crapa si MinGW?
gdb.exe nu crapa daca rulez normal programul sau daca dau debug dar fara sa pun la watch nimic.

___mai tarziu___
Am mai facut niste teste si se pare ca gdb crapa daca declari tablourile prea mari, chiar daca ruland normal sau cu debug dar fara sa pui la watch tabloul merge.


Titlul: Răspuns: 005 Permutari
Scris de: Simoiu Robert din Noiembrie 28, 2010, 17:12:00
Merci, chiar nu am stiut de el .


Titlul: Răspuns: 005 Permutari
Scris de: Alexandru-Iancu Caragicu din Noiembrie 28, 2010, 17:28:21
Merci, chiar nu am stiut de el .

infoarena.ro/portal (http://infoarena.ro/portal)

Am creat eu un mic portal de taguri (neoficial).


Titlul: Răspuns: 005 Permutari
Scris de: Mircea Dima din Noiembrie 28, 2010, 19:14:49
GDB e ... debug-erul ... http://en.wikipedia.org/wiki/GNU_Debugger


Titlul: Răspuns: 005 Permutari
Scris de: Alexandru-Iancu Caragicu din Decembrie 05, 2010, 11:44:07
GDB e ... debug-erul ... http://en.wikipedia.org/wiki/GNU_Debugger

Multumesc.


Titlul: Răspuns: 005 Permutari
Scris de: speedzeal din August 29, 2011, 12:43:23
Ce parametrii ar trebui sa pun la o functie care sa imi inmulteasca doua numere mari (vectori) ?


Titlul: Răspuns: 005 Permutari
Scris de: cont cu nume gresit sau fals din August 29, 2011, 13:30:12
Cod:
void mul(int a[],int b[])
(daca vectorul e de int)


Titlul: Răspuns: 005 Permutari
Scris de: Halalai Tudor Andrei din Octombrie 15, 2011, 11:01:07
in  mingw imi da bine pt toate testele, dar evaluatorul imi spune "killed by signal 11" si nu inteleg dc... ](*,)


Titlul: Răspuns: 005 Permutari
Scris de: Gabriel Bitis din Octombrie 15, 2011, 12:40:49
S-ar putea sa accesezi o zona de memorie nedeclarata. Asta e cauza cea mai frecventa.


Titlul: Răspuns: 005 Permutari
Scris de: Mihai Visuian din Octombrie 28, 2011, 21:37:53
la primul exemplu sunt permutari:
123
132
213
231
312
321
Care sunt cele 3 permutari cu 2 maxime?


Titlul: Răspuns: 005 Permutari
Scris de: Paul-Dan Baltescu din Octombrie 29, 2011, 00:13:55
132
213
231


Titlul: Răspuns: 005 Permutari
Scris de: Mihai Visuian din Octombrie 29, 2011, 10:14:22
AAA deci si primul termen satisface conditia... Ok mersi :)


Titlul: Răspuns: 005 Permutari
Scris de: Radu-Andrei Szasz din Decembrie 21, 2011, 16:05:20
Eu am facut cu long long si am luat 10 puncte.

Ma gandeam sa refac dupa pe numere mari DAR pe exemplul al doilea imi da 34 in loc de 35.

Am folosit formula de recursivitate:

S(n,k) = (n-1)*S(n-1,k) + S(n-1, k-1)

Matricea arata cam asa:

1
1 1
1 3 1
1 10 6 1
1 41 34 10 1

E corect?

PS deasupra diagonalei principale din matrice sunt zerouri.


Titlul: Răspuns: 005 Permutari
Scris de: Simoiu Robert din Decembrie 21, 2011, 16:13:52
Mie imi da asa, cred ca ai gresit la implementare undeva :)
Cod:
1 
1 1
2 3 1
6 11 6 1
24 50 35 10 1


Titlul: Răspuns: 005 Permutari
Scris de: Ababab din Februarie 12, 2012, 00:51:18
Cu ce s-o mai optimizez și eu? Fac dinamică, calculez numai ce îmi trebuie, numere mari, baza 10000, altceva?


Titlul: Răspuns: 005 Permutari
Scris de: Paul-Dan Baltescu din Februarie 12, 2012, 09:43:30
Ar trebui sa mearga sa folosesti o baza mai mare, nu?


Titlul: Răspuns: 005 Permutari
Scris de: Ababab din Februarie 12, 2012, 13:54:48
Mersi Paul. Până la urmă problema era la afișare.


Titlul: Răspuns: 005 Permutari
Scris de: Soucup Nicolae Silviu din Noiembrie 18, 2012, 03:34:16
Pentru N=200, K=5 intoarce cel mai mare numar de permutari (un numar de 375 de cifre)
Cod:
perm.in
200 5

perm.out
149252415010610562810118871122020977205471905181924328378085543507387854669084275030857323769312873458260188717164624285805358775467552513218188581428659301841109221348749123456073042468758139069476925593705616175034733936207012690077150067731441949975413548631799428824526976838794279242824869615657665623906971360554041847946028253184000000000000000000000000000000000000000


Pentru N=300, K=6 intoarce cel mai mare numar de permutari (un numar de 614 de cifre)

Cod:
perm.in
300 6

perm.out
56802861231451930913733317650102406669130965978098941770890104561388113573630668826416434631274460042255541529677501079286882695925004756843016295441910668074180492971189426871593483245355355144976711322234614649630842497003234424625591253993999426580463692343181499596887195755050630541020352696518954323059343972163610231003315287564146110005227994115770477616146588712953524335157881544829419820254252395796166727006206103162927714756611302754436335878332954103144713720363765547098581702702329866515757992861180237019017126353228827062449677176668160000000000000000000000000000000000000000000000000000000000000

 :yahoo:


Titlul: Răspuns: 005 Permutari
Scris de: Preda Danut din Decembrie 29, 2013, 21:31:51
Eu nu inteleg problema asta.
Care ar fi cele 3 permutari care au 2 maxime?


Titlul: Răspuns: 005 Permutari
Scris de: Alexandru Valeanu din Decembrie 30, 2013, 00:06:56
Permutarile sunt: (2,3,1), (1,3,2), (2,1,3); iar in legatura cu problema cauta numerele lui Stirling.


Titlul: Răspuns: 005 Permutari
Scris de: Simion Andrei din Februarie 12, 2014, 18:05:07
O intrebare am .Cand zice k maxime la ce se refera ca nu prea am inteles din cerinta.


Titlul: Răspuns: 005 Permutari
Scris de: UAIC.VlasCatalin din Februarie 14, 2014, 21:35:48
Cum se rezolva problema asta daca in loc de permutari avem niste siruri oarecare, unde se pot repeta unele numere ??? :?


Titlul: Răspuns: 005 Permutari
Scris de: Visan Radu din Februarie 14, 2014, 21:40:11
Mai sunt 2 zile din concursul de pe codechef :P


Titlul: Răspuns: 005 Permutari
Scris de: UAIC.VlasCatalin din Februarie 17, 2014, 23:07:22
Ei bine acum ca s-a terminat concursul de pe codechef imi ziceti si mie cum se rezolva  :)


Titlul: Răspuns: 005 Permutari
Scris de: Munteanu Vlad din Februarie 21, 2014, 15:20:59
Am senzatia ca exemplul 2 e gresit. Daca mai crede cineva asta sa imi spuna, daca nu sa imi posteze cineve cele 35 de siruri sau sa imi explice regula. Mersi!


Titlul: Răspuns: 005 Permutari
Scris de: Tascau Victoria din August 21, 2014, 13:54:40
vladm98
Nope, nu e gresit
1 2 5 3 4
1 2 5 4 3
1 3 2 5 4
1 3 5 2 4
1 3 5 4 2
1 4 2 3 5
1 4 2 5 3
1 4 3 2 5
1 4 3 5 2
1 4 5 2 3
1 4 5 3 2
2 1 3 5 4
2 1 4 3 5
2 1 4 5 3
2 3 1 5 4
2 3 5 1 4
2 3 5 4 1
2 4 1 3 5
2 4 1 5 3
2 4 3 1 5
2 4 3 5 1
2 4 5 1 3
2 4 5 3 1
3 1 2 4 5
3 1 4 2 5
3 1 4 5 2
3 2 1 4 5
3 2 4 1 5
3 2 4 5 1
3 4 1 2 5
3 4 1 5 2
3 4 2 1 5
3 4 2 5 1
3 4 5 1 2
3 4 5 2 1


Titlul: Răspuns: 005 Permutari
Scris de: seretan cristian din Martie 21, 2017, 19:04:29
am folosit backtracking dar imi da doar 10 puncte


Titlul: Răspuns: 005 Permutari
Scris de: AliniateEBlat din Ianuarie 18, 2018, 15:16:40
ma raportez singur :banana: