infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: ditzone din August 03, 2006, 21:55:13



Titlul: 262 Free
Scris de: ditzone din August 03, 2006, 21:55:13
Aici puteţi discuta despre problema Free (http://infoarena.ro/problema/free).


Titlul: Raspuns: 262 Free
Scris de: David si Goliat din 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?


Titlul: Raspuns: 262 Free
Scris de: Bondane Cosmin din August 04, 2006, 12:10:55
da : http://info.devnet.ro/articole.php?page=art&art=22&artpage=4


Titlul: Raspuns: 262 Free
Scris de: David si Goliat din 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. :D


Titlul: Raspuns: 262 Free
Scris de: Bondane Cosmin din 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
 :oops:


Titlul: Re: 262 Free
Scris de: Sima Mihai Cotizo -vechi din 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)...  :thumbup:


Titlul: Raspuns: 262 Free
Scris de: David si Goliat din August 05, 2006, 13:46:38
eu fac tot o cautare binara si operatiile de info.devnet  si iau 100


Titlul: Raspuns: 262 Free
Scris de: Bondane Cosmin din 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


Titlul: Raspuns: 262 Free
Scris de: David si Goliat din 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 ??



Titlul: Re: 262 Free
Scris de: Tiberiu-Lucian Florea din 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.


Titlul: Raspuns: 262 Free
Scris de: Cosmin Negruseri din 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 :)


Titlul: Raspuns: 262 Free
Scris de: u-92 din 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..   


Titlul: Raspuns: 262 Free
Scris de: Cosmin Negruseri din 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.


Titlul: Raspuns: 262 Free
Scris de: David si Goliat din August 06, 2006, 22:03:30
acuma m-am lamurit


Titlul: Raspuns: 262 Free
Scris de: Bondane Cosmin din August 07, 2006, 11:39:44
hmm mai mult de 40 pcte nu pot scoate ...  :-s
nush ce sa modific la cautarea binara ... sigur acol ii ceva gresit


Titlul: Raspuns: 262 Free
Scris de: Cosmin Negruseri din August 07, 2006, 12:02:00
Uite aici doua tutoriale despre cautarea binara:
http://www.tbray.org/ongoing/When/200x/2003/03/22/Binary

http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=binarySearch

Eu de cand am citit primul articol nu am mai bushit la cautare binara. Ideea e sa iti fixezi un invariant la inceput si atunci e foarte usor sa scrii codul fara sa te mai concentrezi la chestii de +/- 1 si sa nu fi sigur ce se intampla.


Titlul: Raspuns: 262 Free
Scris de: Bondane Cosmin din August 07, 2006, 13:17:05
10x Cosmin ... mi-o iesit de 100 in sfarsit  \:D/ [am observat in al 2-lea articol o optimizare, care mo ajutat sa scot pctj maxim]


Titlul: Raspuns: 262 Free
Scris de: Cosmin Negruseri din August 07, 2006, 14:58:07
Ce optimizare ca sunt curios?


Titlul: Raspuns: 262 Free
Scris de: Bondane Cosmin din 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 ...


Titlul: Raspuns: 262 Free
Scris de: nivan din 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


Titlul: Raspuns: 262 Free
Scris de: David si Goliat din August 07, 2006, 18:17:05
pai pentru fiecare mij vezi daca  (mij*mij <=nr&&(mij+1)*(mij+1)>n)
 atunci mij = sqrt(n)


Titlul: Raspuns: 262 Free
Scris de: nivan din August 07, 2006, 18:26:53
mersi da deja imi dadusem seama. mersi oricum.


Titlul: Raspuns: 262 Free
Scris de: Cosmin Negruseri din 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:
Cod:
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.


Titlul: Re: 262 Free
Scris de: Valentin Stanciu din 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 :)


Titlul: Raspuns: 262 Free
Scris de: Cosmin Negruseri din August 07, 2006, 20:01:37
:) Nu prea poti vorbi la overflow la tipuri de date mari :).


Titlul: Raspuns: 262 Free
Scris de: Bondane Cosmin din August 07, 2006, 20:41:41
nush ce ii .... da cu mij=(st+dr)/2 nu imi intra in timp shi cu mij=st+(dr-st)/2 ... 


Titlul: Raspuns: 262 Free
Scris de: Marius Stroe din August 07, 2006, 21:46:56
hmm mai mult de 40 pcte nu pot scoate ...  :-s
nush ce sa modific la cautarea binara ... sigur acol ii ceva gresit

Poate nu ai incercat cu ideea lui Mihai Patrascu.  8)

Am uitat sa pun link: http://info.devnet.ro/articole.php?page=art&art=22


Titlul: Raspuns: 262 Free
Scris de: David si Goliat din August 07, 2006, 21:53:20
Cat despre ce zice pocaitu nu tre sa faci (mij*mij <=nr&&(mij+1)*(mij+1)>n)
ci:....................

Na, eu am scriu prima metoda care mi-a venit in cap si s-a dovedit buna . Mai totdeauna vor exista mai multe solutii la o problema.
Chiar si aici ar mai fi loc de ceva optimizari, dar nu prea si-ar mai avea rostul


Titlul: Raspuns: 262 Free
Scris de: nivan din August 08, 2006, 00:48:49
he he ... hai k mi-o mers  :yahoo:


Titlul: Raspuns: 262 Free
Scris de: Cosmin Negruseri din August 08, 2006, 13:08:18
S-ar putea cand faci mij+1 iesi din intervalul in care faci cautarea binara si sa obtii rezultate neasteptate.

E important sa cititi cele doua articole pe care le-am zis mai devreme.


Titlul: Raspuns: 262 Free
Scris de: nivan din August 11, 2006, 18:22:09
 in cazul de fata nu se intampla asta. adik, merge cu mij + 1


Titlul: Raspuns: 262 Free
Scris de: Cosmin Negruseri din August 11, 2006, 20:58:17
Vorbeam in general despre cum e frumos sa scrii o cautare binara si sa nu mai ai griji, sa nu te gandesti la cazuri. Da voi tot de cazuri imi ziceti  :fighting:. Ce sa ii faci :). Cum vreti voi :)


Titlul: Răspuns: 262 Free
Scris de: Bozianu Ana din August 31, 2007, 10:26:00
Ce frumos merge extragerea radacinii patrate daca reprezinti numarul in baza 2. Super.  :surf:


Titlul: Răspuns: 262 Free
Scris de: Andrei Misarca din Octombrie 25, 2008, 19:21:39
Ce frumos merge extragerea radacinii patrate daca reprezinti numarul in baza 2. Super.  :surf:

Cum se poate afla radicalu unui numar din reprezentarea numarului in baza 2?  :)


Titlul: Răspuns: 262 Free
Scris de: Sima Cotizo din Octombrie 25, 2008, 21:56:32
Probabil se refera la aflarea radicalului prin cautare binara (vezi ideea lui Mihai Patrascu de implementare). Cel putin de asta s-a vorbit in topic.


Titlul: Răspuns: 262 Free
Scris de: Ionescu Robert Marius din Octombrie 26, 2008, 10:21:20
Cat va da pentru:
999192934845325420052052502005230001

MS mika ;)


Titlul: Răspuns: 262 Free
Scris de: Mihai Alex Ionescu din Octombrie 26, 2008, 11:08:12
Cat va da pentru:
999192934845325420052052502005230001

999192934845325419052456116034709688


Titlul: Răspuns: 262 Free
Scris de: Andrici Cezar din Noiembrie 21, 2008, 21:29:24
care e solutia pentru numere mari?


Titlul: Răspuns: 262 Free
Scris de: Cezar Mocan din Noiembrie 21, 2008, 22:37:41
Pai... ai avea 2 alternative. Ori cauti binar rezultatul (pe numere mari... pentru fiecare m compari daca patratul lui m este mai mare sau mai mic decat numarul dat) sau faci radicalul ca pe foaie (pe asta nu'l mai stiu :-'). Spor  :)


Titlul: Răspuns: 262 Free
Scris de: Simoiu Robert din Iunie 01, 2010, 19:52:47
Am incercat sa implementez radical de mana, cu cautarea binara a mers, dar iau incorect la testul 3 si 9. Care sa fie problema ? Am facut exact ca pe foaie, am trat orice caz particular.


Titlul: Răspuns: 262 Free
Scris de: Vlad Tarniceru din Iunie 01, 2010, 21:44:37
pentru problema asta nu trebuie facuta descompunerea in factori primi a fiecarui factor?
adica avem  pasi:
1.descompunerea fiecarei celuli in parte
2.aflarea nr de divizori a nr descompus cu formula:
    nr div = (puterea_1_la_descompunere+1)*(puterea_2_la_descompunere+1)*...*(puterea_k_la_descompunere+1)
3.daca nr de div e par celula e inchisa,daca nu este deschisa

doar ca nu stiu cum sa fac o descompunere pe numere mari astfel incat sa intre in timp...


Titlul: Răspuns: 262 Free
Scris de: Florian Marcu din Iunie 01, 2010, 22:56:02
Raspunsul e N - radical(N). Trebuie implementata functia radical pe numere mari.


Titlul: Răspuns: 262 Free
Scris de: Vlad Tarniceru din Iunie 01, 2010, 22:57:47
aaa acum am inteles :D multumesc mult pentru ajutor :)

o seara(noapte) buna :)


Titlul: Răspuns: 262 Free
Scris de: Simoiu Robert din Iunie 02, 2010, 17:36:07
Merci de ajutor, am reusit oricum. E mult mai rapid implementat de mana decat cautarea binara.


Titlul: Răspuns: 262 Free
Scris de: Socaciu-Cumpanasu Bogdan din Aprilie 02, 2011, 12:54:03
Killed by signal 11(SIGSEGV) ???


Titlul: Răspuns: 262 Free
Scris de: Botocan Bogdan din Aprilie 11, 2011, 21:57:41
Raspunsul e N - radical(N). Trebuie implementata functia radical pe numere mari.

Asta am vazut-o si eu. Doar ca am o problema: cum declar structura in care retin n-ul? n<10^100 => v[10000000...00] - pana la 100 de zero-uri  :-s :-s


Titlul: Răspuns: 262 Free
Scris de: Mihai-Alexandru Dusmanu din Aprilie 12, 2011, 15:29:46
Raspunsul e N - radical(N). Trebuie implementata functia radical pe numere mari.

Asta am vazut-o si eu. Doar ca am o problema: cum declar structura in care retin n-ul? n<10^100 => v[10000000...00] - pana la 100 de zero-uri  :-s :-s

n < 10 ^ 100 inseamna ca are maxim 100 cifre. Deci vectoru tau trebuie declarat v[101] minim, pentru ca fiecare element al lui va retine o cifra.


Titlul: Răspuns: 262 Free
Scris de: Botocan Bogdan din Aprilie 12, 2011, 16:44:29
Raspunsul e N - radical(N). Trebuie implementata functia radical pe numere mari.

Asta am vazut-o si eu. Doar ca am o problema: cum declar structura in care retin n-ul? n<10^100 => v[10000000...00] - pana la 100 de zero-uri  :-s :-s

n < 10 ^ 100 inseamna ca are maxim 100 cifre. Deci vectoru tau trebuie declarat v[101] minim, pentru ca fiecare element al lui va retine o cifra.

Mersi de raspuns, mi-am dat seama azi dimineata :oops: :aha:


Titlul: Răspuns: 262 Free
Scris de: Ioan Mihai din Aprilie 17, 2019, 17:05:43
Mie imi da Killed by signal 11 si nush de ce :aha: