•DITzoneC
|
 |
« : Octombrie 14, 2007, 21:21:29 » |
|
Aici puteţi discuta despre problema Functii.
|
|
|
Memorat
|
|
|
|
•Florian
|
 |
« Răspunde #1 : Octombrie 21, 2007, 12:35:10 » |
|
Ea [b]trebui[/b] sa numere cate functii surjective definite pe multimea { 1,2,3,4..n } cu valori in multimea numerelor { 0,-1,1 } [i]exista[/i] astfel incat |f(1)| + |f(2)| + .. |f(n)| =S (toate sunt in modul) . Cuvantul "exista" e pus de la mine... Cred k ar trebui reparate aceste 2 greseli. 
|
|
« Ultima modificare: Octombrie 21, 2007, 16:27:05 de către Marcu Florian »
|
Memorat
|
|
|
|
•devilkind
|
 |
« Răspunde #2 : Octombrie 21, 2007, 13:01:44 » |
|
enuntul a fost modificat. De asemenea a fost modificata o restrictie (oops  ). Imi cer scuze ptr cei care s-au chinuit sa rezolve problema si au luat 0 din cauza enuntului.
|
|
|
Memorat
|
|
|
|
•Dastas
|
 |
« Răspunde #3 : Octombrie 21, 2007, 14:52:29 » |
|
Cum se poate calcula o expresie de genul [(x^y)-k] % p? Sau trebuie numere mari pt efectuarea ridicarii la putere?
|
|
|
Memorat
|
|
|
|
•devilkind
|
 |
« Răspunde #4 : Octombrie 21, 2007, 16:02:35 » |
|
rest= x^y%p; rest-=k; while (rest<0) rest+=p;
|
|
|
Memorat
|
|
|
|
•stef2n
|
 |
« Răspunde #5 : Octombrie 21, 2007, 16:13:00 » |
|
Sau ca sa eviti while-ul: rest=(x^y)%p; rest-=k%p; if(rest<0) rest+=p;
|
|
|
Memorat
|
Exista 10 categorii de oameni: cei care inteleg sistemul binar si cei care nu il inteleg.
|
|
|
•c_sebi
Client obisnuit

Karma: 24
Deconectat
Mesaje: 62
|
 |
« Răspunde #6 : Octombrie 21, 2007, 16:26:13 » |
|
Cand trimit o sursa imi apare eroarea Eroare de compilare in evaluator: sh: g++: command not found
|
|
|
Memorat
|
|
|
|
•DITzoneC
|
 |
« Răspunde #7 : Octombrie 21, 2007, 17:06:31 » |
|
Ar trebui sa se fi rezolvat problema acum.
Daca mai apare vreo chestie ciudata nu ezitati sa semnalati.
|
|
|
Memorat
|
|
|
|
•devilkind
|
 |
« Răspunde #8 : Octombrie 21, 2007, 17:31:53 » |
|
S-a mai modificat odata enuntul. Rezultatul trebuie afisat modulo 30103. Scuze 
|
|
|
Memorat
|
|
|
|
•Dastas
|
 |
« Răspunde #9 : Octombrie 21, 2007, 17:52:18 » |
|
In sfarsit... habar n-aveam de la ce primeam WA...
|
|
|
Memorat
|
|
|
|
•Florian
|
 |
« Răspunde #10 : Iunie 05, 2008, 15:50:19 » |
|
Care e cea mai rapida metoda de a calcula Comb(n,k) la problema asta? Am vazut ca in complexitate O(n*k) nu intra in timp...
|
|
|
Memorat
|
|
|
|
•iepuras_binar
Strain
Karma: -1
Deconectat
Mesaje: 8
|
 |
« Răspunde #11 : Iunie 05, 2008, 16:58:43 » |
|
E o problema...
Nu se poate unui X sa apartina mai multe Y..ori asta s ar intampla daca X ar fi mai mic ca Y cum e in ex vostru..intervalul 1 < n < 10000 e prost facut
Floryan a vazut asta primul...
|
|
« Ultima modificare: Iunie 05, 2008, 17:12:35 de către Alexandru B. »
|
Memorat
|
|
|
|
•devilkind
|
 |
« Răspunde #12 : Iunie 05, 2008, 17:21:44 » |
|
@florian: daca ti-ai face o matrice C[ i ][ j ] - combinari de i luate cate j, ai putea calcula independent fiecare linie in o(n). Gandestete cum ai putea sa scoti din C[ i ][ j ] pe C[ i ][ j+1 ]
@Alexandru_B: Nu e prost facut intervalul. Daca nu poate exista o functie ptr care proprietatile din enunt sa fie indeplinite mie mi se pare normal ca raspunsul sa fie 0.
|
|
« Ultima modificare: Iunie 05, 2008, 18:05:51 de către Stefan Istrate »
|
Memorat
|
|
|
|
•iepuras_binar
Strain
Karma: -1
Deconectat
Mesaje: 8
|
 |
« Răspunde #13 : Iunie 05, 2008, 17:48:42 » |
|
Ok...scz credeam ca pur si simplu nu are cazuri imposibile. Ce matrice este aia C[j]?
|
|
|
Memorat
|
|
|
|
•Florian
|
 |
« Răspunde #14 : Iunie 05, 2008, 17:59:42 » |
|
@florian: daca ti-ai face o matrice C[ i ][ j ] - combinari de i luate cate j, ai putea calcula independent fiecare linie in o(n). Gandestete cum ai putea sa scoti din C[ i ][ j ] pe C[ i ][ j+1 ]
Nu prea am inteles ce vrei sa spui... Clasic se rezolva cu c[ i ][ j ]=c[ i-1 ][ j ]+c[ i-1 ][ j-1 ]. Eventual se reduce memoria, utilizand doar doi vectori [pt ultimile 2 linii]. Aceasta rezolvare are complexitate O(N*K) si nu intra in timp. Poti detalia putin ideea ta...? 
|
|
« Ultima modificare: Iunie 05, 2008, 18:06:19 de către Stefan Istrate »
|
Memorat
|
|
|
|
•stef2n
|
 |
« Răspunde #15 : Iunie 05, 2008, 18:11:18 » |
|
Tie iti trebuie doar restul la impartirea cu 30103 (numar prim). Poti sa precalculezi resturile factorialelor, iar pentru combinari folosesti definitia: C(N, K) = N! / (K! * (N - K)!). Inmultesti un numar cu 2 inverse modulare ale celorlalte.
|
|
|
Memorat
|
Exista 10 categorii de oameni: cei care inteleg sistemul binar si cei care nu il inteleg.
|
|
|
•Florian
|
 |
« Răspunde #16 : Iunie 05, 2008, 18:48:14 » |
|
Ok. Va multumesc amandorura pentru raspunsuri. @devilkind : astept sa vii cu o explicatie putin mai detaliata... pare interesant ce ai spus, dar nu ma prind. Apropop de inverse modulare. Nu am lucrat niciodata si cred ca e timpul sa ma apuc. Sper sa nu fiu prea offtopic. Sa consideram o formula mai simpla, deci sa zicem ca am de calculat ( X/Y ) % P. In loc sa calculez impartirea, mai bine inmultesc X cu inversul lui Y. Inversul lui Y (de la mate) este 1/Y. Dar acum apare Fermat si spune ca X^(P-1) % P = 1 => X^(-1)=X(P-2) (mod P). Asadar, inversul lui Y [din formula noastra] devine Y^(P-2). Asadar, problema se reduce la egalitatea: . X/Y = X * Y^(P-2) ( mod P) Iar in cazul problemei "functii", X este n!, iar Y este k! (si apoi (n-k)! ), iar P este 30103. Cam asta stiam eu.. insa nu am lucrat niciodata cu asta. E bine ce am spus ? Daca am gresit in vreun loc, va rog sa imi spuneti. Multumesc! 
|
|
|
Memorat
|
|
|
|
•devilkind
|
 |
« Răspunde #17 : Iunie 05, 2008, 19:03:57 » |
|
C(n,k)= n!/k!*(n-k)! = n!/( (k-1)!*(n-k+1)! ) * (n-k+1)/k = C(n,k-1) * (n-k+1)/k
|
|
|
Memorat
|
|
|
|
•stef2n
|
 |
« Răspunde #18 : Iunie 05, 2008, 19:07:42 » |
|
Cam asta stiam eu.. insa nu am lucrat niciodata cu asta. E bine ce am spus ? Daca am gresit in vreun loc, va rog sa imi spuneti.
E corect.
|
|
|
Memorat
|
Exista 10 categorii de oameni: cei care inteleg sistemul binar si cei care nu il inteleg.
|
|
|
•Florian
|
 |
« Răspunde #19 : Iunie 05, 2008, 20:25:09 » |
|
C(n,k)= n!/k!*(n-k)! = n!/( (k-1)!*(n-k+1)! ) * (n-k+1)/k = C(n,k-1) * (n-k+1)/k
Interesanta idee. E bn de stiut lucrul asta. Multumesc. Multumesc si tie, Stefan Istrate. 
|
|
|
Memorat
|
|
|
|
•cosmin79
Strain
Karma: 36
Deconectat
Mesaje: 46
|
 |
« Răspunde #20 : August 13, 2009, 19:43:28 » |
|
Salut.Am o nelamurire la problema asta.Eu m-am gandit cam asa: E clar ca daca |f(1)| + |f(2)| + .. |f(n)| =S exista fix S din cele n valori din domeniu egale cu 1 sau -1 si mai sunt deci n-S valori de 0.Ca functiile cautate sa fie sigur surjective Aleg cate o valoare de 1 si de -1(e garantat faptul ca vor fi zerouri).Sunt n*(n-1)posibilitati de alegere a celor 2 valori de 1 si -1.Pe urma au mai ramas S-2 valori de 1 sau -1 de pus.Sunt comb[n-2][S-2] metode de a alege o configuratie de S-2 valori din n-2 posibile.Pentru fiecare configuratie sunt 2^(S-2) metode de a alege 1 sau -1. Ca urmare => rezultatul cautat ar trebui sa fie : n*(n-1)*comb[n-2][S-2]*2^(S-2) ,avand grija la operatiile in modul. Pe exemplu n=5,S=3 => inlocuind: 5*4*comb[3][1]*2^1=5*4*3*2=120 ,nu 60. Poate cineva sa ma lamureasca unde gresesc in rationament? 
|
|
|
Memorat
|
|
|
|
•costyrazvy
Strain
Karma: -1
Deconectat
Mesaje: 6
|
 |
« Răspunde #21 : Aprilie 10, 2014, 13:30:01 » |
|
Imi puteti da si mie o functie invmodular(x)  Ca nu inteleegg
|
|
|
Memorat
|
|
|
|
|
•valentin50517
Strain
Karma: 0
Deconectat
Mesaje: 8
|
 |
« Răspunde #23 : Iunie 07, 2016, 12:03:22 » |
|
poate cineva sa-mi explice de ce 60 dar nu 80? problema consta in cate combinari de {1,0,-1} luate cate N exista astfel incat suma modulelor lor sa fie S sau eu ceva nu am inteles corect? dupa logica mea ar trebui sa fie C(N,K)*2^K. 
|
|
|
Memorat
|
|
|
|
•Djok
Client obisnuit

Karma: 10
Deconectat
Mesaje: 71
|
 |
« Răspunde #24 : Iunie 07, 2016, 12:56:34 » |
|
nu e chiar 2^K (unde K == sum)
e (2^K)-2
1) excluzi mulțimea vidă 2) surjectivitatea înseamnă că trebuie să ai valori și de -1 și de 0 și de 1, cu alte cuvinte n-ai voie să ai doar 0 și 1 sau doar 0 și -1
|
|
|
Memorat
|
|
|
|
|