ditzone
Vizitator
|
 |
« : August 03, 2006, 21:55:13 » |
|
Aici puteţi discuta despre problema Free.
|
|
|
Memorat
|
|
|
|
•pocaitu
|
 |
« Răspunde #1 : August 04, 2006, 11:24:08 » |
|
Stie cineva un link unde gasesc operatii cu numere mari , ca la programu meu operatiile astea imi iau o gramada de timp?
|
|
|
Memorat
|
This is not a signature ! I repeat, this is not a signature !
|
|
|
•cos_min
|
 |
« Răspunde #2 : August 04, 2006, 12:10:55 » |
|
|
|
|
Memorat
|
vid...
|
|
|
•pocaitu
|
 |
« Răspunde #3 : August 05, 2006, 00:09:24 » |
|
mersi ffff mult cos_min . Intradevar erau cam complicate operatiile mele; le faceam pe siruri de caractere (char) pt ca puteai sa afli lungimea lor dar se pare ca a fost o prostie. 
|
|
|
Memorat
|
This is not a signature ! I repeat, this is not a signature !
|
|
|
•cos_min
|
 |
« Răspunde #4 : August 05, 2006, 10:44:12 » |
|
hmm numa 20 pcte iau (restu TLE)... pt sqrt fac o cautare binara si operatiile pe nr mari le folosesc cele din articolul de pe info.devnet.ro 
|
|
|
Memorat
|
vid...
|
|
|
•Coty
|
 |
« Răspunde #5 : August 05, 2006, 10:47:26 » |
|
incearca sa extragi radicalul "ca pe foaie"... eu iau 70 pe rezolvarea asta, inca am un mic bug... si complexitate o sa iasa O(Nr cifre)... 
|
|
|
Memorat
|
|
|
|
•pocaitu
|
 |
« Răspunde #6 : August 05, 2006, 13:46:38 » |
|
eu fac tot o cautare binara si operatiile de info.devnet si iau 100
|
|
|
Memorat
|
This is not a signature ! I repeat, this is not a signature !
|
|
|
•cos_min
|
 |
« Răspunde #7 : August 05, 2006, 16:02:05 » |
|
hmm dak initializez de fiecare data siru cu memset imi iese din timp shi dak nu ii il initializez nu imi merge ... ce pot face? need help
|
|
« Ultima modificare: August 05, 2006, 16:29:10 de către cos_min »
|
Memorat
|
vid...
|
|
|
•pocaitu
|
 |
« Răspunde #8 : August 06, 2006, 15:51:12 » |
|
ca tot veni vorba de memset , stie cineva de ce la mine pe calculator nu merge NICIODATA memset-ul decat atunci cand initializez sirul cu 0 ??
|
|
« Ultima modificare: August 06, 2006, 22:02:52 de către pocaitu »
|
Memorat
|
This is not a signature ! I repeat, this is not a signature !
|
|
|
•greco
|
 |
« Răspunde #9 : August 06, 2006, 17:00:20 » |
|
memset-ul seteaza fiecare byte la valoarea pe care i-o dai. Pe un vector de char o sa-ti mearga mereu, dar pe un vector de int se seteaza atat primul cat si cel de-al doilea byte cu valoarea. De exemplu, facand memset(v, 1, sizeof(v)) unde v e char, fiecare element o sa fie egal cu 00000001, iar facand memset(v, 1, sizeof(v)) unde v e int, fiecare element o sa fie egal cu 0000000100000001.
Ma rog... asta daca sizeof(int) = 2. Daca sizeof(int) = 4... o sa apara 00000001 de 4 ori.
|
|
« Ultima modificare: August 06, 2006, 17:39:22 de către greco »
|
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.
|
|
|
•Cosmin
|
 |
« Răspunde #10 : August 06, 2006, 17:20:23 » |
|
Singurele numere care isi pastreaza reprezentarea binara daca sunt dublate sunt -1 si 0  deci iti va merge si memset cu -1 tot timpul 
|
|
|
Memorat
|
|
|
|
u-92
Vizitator
|
 |
« Răspunde #11 : August 06, 2006, 18:15:08 » |
|
memset(A, 0, sizeof(A)) va merge pe orice platforma daca A este de tipul char. daca A este de tip int sa spunem pot aparea surprize, in sensul ca toate elementele lui A nu vor avea valoarea 0 (zero). nu ar trebui sa fie nicio diferenta intre un for si memset, ba chiar sa mearga mai repede for-ul, insa pe un post mai vechi infoa erau facute niste teste si memset rula mai avantajos ca timp. asa am auzit eu..
|
|
|
Memorat
|
|
|
|
•Cosmin
|
 |
« Răspunde #12 : August 06, 2006, 18:30:47 » |
|
Daca te refereai ca -1 e intreg, el are aceiasi reprezentare binara 111....111 pe oricati biti ar fi reprezentat, deci cred ca merge pe orice platforma la fel.
|
|
|
Memorat
|
|
|
|
•pocaitu
|
 |
« Răspunde #13 : August 06, 2006, 22:03:30 » |
|
acuma m-am lamurit
|
|
|
Memorat
|
This is not a signature ! I repeat, this is not a signature !
|
|
|
•cos_min
|
 |
« Răspunde #14 : August 07, 2006, 11:39:44 » |
|
hmm mai mult de 40 pcte nu pot scoate ... nush ce sa modific la cautarea binara ... sigur acol ii ceva gresit
|
|
|
Memorat
|
vid...
|
|
|
|
•cos_min
|
 |
« Răspunde #16 : August 07, 2006, 13:17:05 » |
|
10x Cosmin ... mi-o iesit de 100 in sfarsit  [am observat in al 2-lea articol o optimizare, care mo ajutat sa scot pctj maxim]
|
|
|
Memorat
|
vid...
|
|
|
•Cosmin
|
 |
« Răspunde #17 : August 07, 2006, 14:58:07 » |
|
Ce optimizare ca sunt curios?
|
|
|
Memorat
|
|
|
|
•cos_min
|
 |
« Răspunde #18 : August 07, 2006, 15:03:55 » |
|
optimizare : mij=st+(dr-st)/2 .. dak am pus asta in loc de mij = (st+dr)/2 mi-o mers ...
|
|
|
Memorat
|
vid...
|
|
|
nivan
Vizitator
|
 |
« Răspunde #19 : August 07, 2006, 17:34:23 » |
|
dupa ce am facut cautarea binara, am observat ca implementarea ei pe numere HUGE dar intregi (fara virgula), obtine SQRT-ul doar pentru numerele patrate perfecte. De altfel asa e si logic 25*25 = 625 nu cu 626. Daca caut radical din 626 nu va gasi nimic.
O metdoda de a obtine truncul ar fi sa fac operatiile pe numere mari cu virgula. Dar inainte sa ma omor, poate exista o varianta mai simpla si nu-mi dau eu seama acuma.
Ma corectez... nu merge nici pe numere mari cu virgula
|
|
« Ultima modificare: August 07, 2006, 17:47:03 de către nivan »
|
Memorat
|
|
|
|
•pocaitu
|
 |
« Răspunde #20 : August 07, 2006, 18:17:05 » |
|
pai pentru fiecare mij vezi daca (mij*mij <=nr&&(mij+1)*(mij+1)>n) atunci mij = sqrt(n)
|
|
|
Memorat
|
This is not a signature ! I repeat, this is not a signature !
|
|
|
nivan
Vizitator
|
 |
« Răspunde #21 : August 07, 2006, 18:26:53 » |
|
mersi da deja imi dadusem seama. mersi oricum.
|
|
|
Memorat
|
|
|
|
•Cosmin
|
 |
« Răspunde #22 : August 07, 2006, 18:52:03 » |
|
Dubios cos_mine  aia nu prea e optimizare ci poate doar schimbare a modului in care scrii codul. O optimizare ar fi sa folosesti in loc de baza 10 o baza de 1000 sau 1000000. Cat despre ce zice pocaitu nu tre sa faci (mij*mij <=nr&&(mij+1)*(mij+1)>n) ci: low_end = 0 high_end = 10^100 + 1 while high_end - low_end > 1 mid = (high_end + low_end) / 2 if mid * mid <= n low_end = mid else high_end = mid
write low_end
invariantul aici este ca low_end <= sqrt(n) si high_end > sqrt(n), vedeti ce usor stim ce valoare trebuie sa ii dam lui high_end si low_end dupa o comparatie, si nu mai apare nici un +-1.
|
|
|
Memorat
|
|
|
|
•svalentin
|
 |
« Răspunde #23 : August 07, 2006, 18:59:47 » |
|
poate lui cos_min ii dadea overflow.. adica poate st+dr iesea din tipul lui de date.. daca calculezi prin st+(dr-st)/2 nu vad unde poate da overflow .. oricum, nu e optimizare 
|
|
|
Memorat
|
|
|
|
•Cosmin
|
 |
« Răspunde #24 : August 07, 2006, 20:01:37 » |
|
 Nu prea poti vorbi la overflow la tipuri de date mari  .
|
|
|
Memorat
|
|
|
|
|