•fluffy
|
 |
« : Martie 08, 2004, 19:54:43 » |
|
Aici puteţi discuta despre problema Permutari.
|
|
|
Memorat
|
|
|
|
•stifmeister
Strain
Karma: 0
Deconectat
Mesaje: 24
|
 |
« Răspunde #1 : 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?
|
|
|
Memorat
|
|
|
|
•gogu
Client obisnuit

Karma: 42
Deconectat
Mesaje: 98
|
 |
« Răspunde #2 : Martie 12, 2005, 14:37:23 » |
|
tu ai bagat operatii pe numere mari? 
|
|
|
Memorat
|
|
|
|
VladS
Vizitator
|
 |
« Răspunde #3 : 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. 
|
|
|
Memorat
|
|
|
|
VladS
Vizitator
|
 |
« Răspunde #4 : 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.
|
|
|
Memorat
|
|
|
|
•bogdan2412
|
 |
« Răspunde #5 : 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.
|
|
|
Memorat
|
|
|
|
•stifmeister
Strain
Karma: 0
Deconectat
Mesaje: 24
|
 |
« Răspunde #6 : 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.
|
|
|
Memorat
|
|
|
|
•stifmeister
Strain
Karma: 0
Deconectat
Mesaje: 24
|
 |
« Răspunde #7 : 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?
|
|
|
Memorat
|
|
|
|
•domino
|
 |
« Răspunde #8 : Martie 13, 2005, 13:07:09 » |
|
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
|
|
|
Memorat
|
|
|
|
•ManolacheAdrian
Strain
Karma: -3
Deconectat
Mesaje: 4
|
 |
« Răspunde #9 : 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.
|
|
|
Memorat
|
|
|
|
•bogdan2412
|
 |
« Răspunde #10 : 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?
|
|
|
Memorat
|
|
|
|
•stifmeister
Strain
Karma: 0
Deconectat
Mesaje: 24
|
 |
« Răspunde #11 : 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.
|
|
|
Memorat
|
|
|
|
•LucAnd
Strain
Karma: -1
Deconectat
Mesaje: 26
|
 |
« Răspunde #12 : 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"!!
|
|
|
Memorat
|
|
|
|
•peanutz
|
 |
« Răspunde #13 : 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.... 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?
|
|
|
Memorat
|
....staind....
|
|
|
•bogdan2412
|
 |
« Răspunde #14 : Februarie 08, 2007, 21:00:48 » |
|
Poti incerca sa folosesti baza 10000 sau 10^6 pentru numere.
|
|
|
Memorat
|
|
|
|
•peanutz
|
 |
« Răspunde #15 : 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...
|
|
« Ultima modificare: Februarie 09, 2007, 00:29:25 de către Andrei Homorodean »
|
Memorat
|
....staind....
|
|
|
•C_Ovidiu
Strain
Karma: -37
Deconectat
Mesaje: 46
|
 |
« Răspunde #16 : Februarie 26, 2007, 21:00:22 » |
|
Nu stiu daca am inteles prea bine problema . Nu posteaza cineva sirurile de lungime 3 cu 2 maxime ?
|
|
|
Memorat
|
|
|
|
•devilkind
|
 |
« Răspunde #17 : Februarie 26, 2007, 21:14:24 » |
|
231 132 213
|
|
|
Memorat
|
|
|
|
•Qbyx
Strain
Karma: -2
Deconectat
Mesaje: 10
|
 |
« Răspunde #18 : 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  hlp pls (sry bad roman)
|
|
|
Memorat
|
|
|
|
•pauldb
|
 |
« Răspunde #19 : 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. 
|
|
|
Memorat
|
Am zis 
|
|
|
•Qbyx
Strain
Karma: -2
Deconectat
Mesaje: 10
|
 |
« Răspunde #20 : 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.  ..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?
|
|
|
Memorat
|
|
|
|
•pauldb
|
 |
« Răspunde #21 : 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.
|
|
|
Memorat
|
Am zis 
|
|
|
•stef2n
|
 |
« Răspunde #22 : Martie 18, 2007, 10:38:21 » |
|
Pe testul 5 sursa mea ruleaza in 288ms, iar pe testul 8 ruleaza in 252ms 
|
|
|
Memorat
|
Exista 10 categorii de oameni: cei care inteleg sistemul binar si cei care nu il inteleg.
|
|
|
•devilkind
|
 |
« Răspunde #23 : Martie 18, 2007, 10:49:22 » |
|
si mie mi-a intrat cam cu aceeasi timpi aproximativ folosind baza 10.
|
|
|
Memorat
|
|
|
|
•Qbyx
Strain
Karma: -2
Deconectat
Mesaje: 10
|
 |
« Răspunde #24 : 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!!! Acum timpul la testul 5 e 72 ms  ... Thx 
|
|
|
Memorat
|
|
|
|
|