|
Titlul: 051 Pascal Scris de: Mircea Pasoi din Februarie 24, 2005, 20:51:47 Aici puteţi discuta despre problema Pascal (http://infoarena.ro/problema/pascal).
Titlul: 051 Pascal Scris de: Iorgulescu Calin din Aprilie 21, 2005, 21:48:05 :cry: Va rog mult.... am incercat exact metoda din solutiile de la pre ONI runda 2... Exact asa....
parcurg randul....calculez puterea fact. primi in desc. lui r! apoi in r-c! si apoi in c!. Apoi fac puterea lui r - puterea lui r-c - puterea lui c. Am tratat si cazul divizorilor neprimi. Si nu iau decat 60 de puncte. Oricine stie o idee de optimizare... Macar un indiciu.... Titlul: 051 Pascal Scris de: Bogdan-Cristian Tataroiu din Aprilie 22, 2005, 09:28:36 Calculeaza intr-un vector puterea factorilor din numerele de la 1 la r ( fac = fac[i-1] + nrdiv(i) ) si dupa aia la verificare vezi dc fac[r] - fac[r-i] - fac > 0, i de la 1 pana la r
Daca calculai pt fiecare elem numarul de factori din r-c! si din c!, calculai de 2 ori numarul de factori pt fiecare numar de la 1 la r. ex: r=5 c=1 calculai fac(1) si fac(4) r=5 c=4 calculai fac(4) (din nou) si fac(1) (din nou) Titlul: 051 Pascal Scris de: u-92 din Aprilie 23, 2005, 11:38:53 si eu tot 60 de puncte luam.. dar am facut urmatoarele optimizari:
1) mergi doar pana la r/2, nu verifici tot randul fiindca e simetric 2) calculezi puterea la care apare d in r! (fie ea "p"), si dupa aia ca sa vezi puterea la care apare in (r-1)! scazi din p puterea la care apare d in descompunerea lui r, dupa aia scazi din noua putere puterea la care apare d in r-1.. si tot asa.. acelasi idee o aplici si pentru a vedea puterea lui d in j! succes. Titlul: 051 Pascal Scris de: Iorgulescu Calin din Aprilie 25, 2005, 08:40:16 Mersi amandurora.... Cu varianta cu vectorul am luat 100 de puncte \:D/ . Iar u-92 mi-a lamurit ideea mea originala.... Fiindca chiar nu intelegeam ( P.S. : Si eu mergeam tot pana la r/2 :wink: ) de ce nu mergea cu formula si acum e destul de clar. Multumesc mult! Bafta in continuare! :wink:
Titlul: 051 Pascal Scris de: cristi8 din Mai 02, 2005, 23:29:51 40/100... iau WA la 6 teste.
am citit si articolul cu solutie, si am vazut ca trebuie facut cazul cand d nu este prim. ...nu merge sa se calculeze la fel ? adica [n/d] + [n/d^2] + [n/d^3] + ... Titlul: 051 Pascal Scris de: Bogdan-Cristian Tataroiu din Mai 03, 2005, 07:10:15 Citat din mesajul lui: Fr3eM4n 40/100... iau WA la 6 teste. am citit si articolul cu solutie, si am vazut ca trebuie facut cazul cand d nu este prim. ...nu merge sa se calculeze la fel ? adica [n/d] + [n/d^2] + [n/d^3] + ... NU. Daca vrei sa afli puterea la care se afla 4 de ex. in 10! atunci ti-ar da: [10/4]+[10/16]=2. Daca insa ai calcula puterea la care se afla 2 in 10 ! si ai imparti totul la 2 ( 4=2^2 ) ai obtine: ( [10/2] + [10/4] + [10/8] ) / 2 = ( 5 + 2 + 1 ) / 2 = 4. Formula care ai zis-o merge doar pentru numere prime. In cazul de mai sus, cand calculai cu [10/4]+[10/16]+.. se ignora un factor de 2 din numarul 2, unul din numarul 6, unul din 8 si unul din 10. Inmultite acesti factori pierduti dau 2^4 = 4^2 de unde rezulta diferenta de 2 data de cele doua calcule. Titlul: 051 Pascal Scris de: cristi8 din Mai 03, 2005, 10:01:40 da... good point.. mersi mult.
i'll never solve problems after 0:00 again :D Titlul: 051 Pascal Scris de: Tira Cristian din Februarie 17, 2006, 16:01:40 Imi spune cineva ce poate sa fie cu "Fisier de iesire lipsa!". Programul meu imi creeaza fiesierele si imi da raspunsuri corecte iar cand o trimit primesc aceeasi eroare si 0 pc.
Please I'm desperate! :fighting: Titlul: 051 Pascal Scris de: Silviu-Ionut Ganceanu din Februarie 17, 2006, 17:10:38 Sigur ai scris corect numele fisierului de iesire ?
Zi-mi user-ul tau pe infoA. Silviu Titlul: 051 Pascal Scris de: Tira Cristian din Februarie 20, 2006, 12:43:16 Acelasi, Crusher. Dar am facut-o inca o data de la inceput si acum imi da cat de cat un amarat de 10 pc. Dar ieri am descoperit o mica mare ghidusie si am sa incerc cu aia sa vad cum se descurca in lume ca e mai optima decat prima. :shock:
Titlul: Raspuns: 051 Pascal Scris de: razvan brezulianu din Noiembrie 16, 2006, 13:52:29 mai ce inseamna SIGKILL am trimis acesta problema si mi-a dat SIGKILL la fiecare test :'(
Titlul: Raspuns: 051 Pascal Scris de: Marius Stroe din Noiembrie 16, 2006, 14:24:34 mai ce inseamna SIGKILL am trimis acesta problema si mi-a dat SIGKILL la fiecare test :'( Ai declarat mai mult de 64 MB, cred ... Titlul: Raspuns: 051 Pascal Scris de: Adrian Dobrescu din Noiembrie 16, 2006, 18:32:57 cand depasesti dimensiunea tablourilor, pe care ai declarat-o, iti da erori de genul asta:
sigkill sau sigsegv Titlul: Răspuns: 051 Pascal Scris de: Trifan Cristina din Mai 04, 2007, 21:18:59 Bun...si pt a calcula n!/(n-p)!*p! solutia optima care ar fi? ca banuiesc ca nu backtracking
Titlul: Răspuns: 051 Pascal Scris de: Florian Marcu din Mai 04, 2007, 21:25:25 Nu prea vad ce treaba ar avea back-ul...Vezi poate te ajuta articolul cu solutii.... [ http://infoarena.ro/preoni-2005/runda-2/solutii ]
Titlul: Răspuns: 051 Pascal Scris de: Andrei Homorodean din Mai 04, 2007, 21:39:35 n!/((n-p)!*p!) - nu n!/(n-p)!*p!, adica combinari de n luate cate p. Exista o recurenta pentru asa ceva, si anume C(n, p) = C(n-1, p-1) + C(n-1, p).
Vezi triunghiul lui pascal. 1 1 1 1 2 1 1 3 3 1 C(n, 0) = C(n, n) = 1 Titlul: Răspuns: 051 Pascal Scris de: Trifan Cristina din Mai 04, 2007, 21:51:37 Florian in caz ca nu te-ai prins trebuie sa generezi un vector in care sa retii toate numerele de pe al n rand al triunghiului pascal!! si spune ca se genereaza cu n!/(n-p)!*p!.......daca intelegi ce spun.....si homorodean chiar atat de proasta nu sunt ca sa nu stiu cum e...scuze am uitat o paranteza
Titlul: Răspuns: 051 Pascal Scris de: Florian Marcu din Mai 04, 2007, 22:07:46 C(n, 0) = C(n, n) = 1 Este bine...am implementat relatia de recurenta si imi iese, insa nu ar trebui C(0,0)=1 in loc de c(n,0)? Florian in caz ca nu te-ai prins trebuie sa generezi un vector in care sa retii toate numerele de pe al n rand al triunghiului pascal!! si spune ca se genereaza cu n!/(n-p)!*p!.......daca intelegi ce spun... Am spus doar k nu are ce cauta back-ul...relatia pe care a dat-o Andrei Homorodean kred k este arhisuficienta... Titlul: Răspuns: 051 Pascal Scris de: Trifan Cristina din Mai 04, 2007, 22:10:08 Ms....pai da dar mi-ai dat sa ma uit peste solutia oficiala..dar acolo nu spune nimic despre asta :P
si nu ar trebui C(0,0) in loc fde C(n,0)--> pt ca n!/((n-0)!*0!)=1 Titlul: Răspuns: 051 Pascal Scris de: Florian Marcu din Mai 04, 2007, 22:14:34 Ok. Insa am zis "poate te ajuta"..! Un articol cu solutii iti poate oferi idei. Intr-adevar..se pare k nu zice nimik de ideea pe care ai abordat-o tu, insa eu am vrut doar sa ajut. :D Orikum..e bine k am invatat relatia de recurenta pt triunghiul lui Pascal... Multumesc, Andrei Homorodean! :thumbup:
Titlul: Răspuns: 051 Pascal Scris de: Andrei Homorodean din Mai 04, 2007, 22:22:51 n ia valori de la 0 incepand.(n nu tine de datele problemei sau ceva in genul, vorbesc de generalitate)
Titlul: Răspuns: 051 Pascal Scris de: Florian Marcu din Mai 04, 2007, 22:24:46 ](*,) Mda...greseala mea..Abia am invatat recursivitatea si ink o mai incurc..sorry..
Titlul: Răspuns: 051 Pascal Scris de: Trifan Cristina din Mai 04, 2007, 22:36:13 Mai am folosit recurenta c(n,p)=c(n-1,p-1)+c(n-1,p), insa iau TLE la 8 test...ma poate ajuta cineva pls?
Titlul: Răspuns: 051 Pascal Scris de: Andrei Homorodean din Mai 04, 2007, 22:42:23 Incearca solutia oficiala, m-am uitat si eu peste sursa acum(o facusem mai demult), si am facut ca si in solutia oficiala. Cam multe TLE indeed :P
Titlul: Răspuns: 051 Pascal Scris de: Florian Marcu din Mai 04, 2007, 22:46:34 Mda..eu iau 30 de puncte folosind relatia de recurenta...cu TLE pe restu`....se pare k tot la aia oficiala am ajuns... :)
Titlul: Răspuns: 051 Pascal Scris de: Trifan Cristina din Mai 05, 2007, 20:22:27 Mai am acum o singura problema am implementat problema si am luat 90 de punce cu TLE la ultimul test, ma poate ajuta cineva?
Test Timp executie Memorie folosita Mesaj Punctaj/test 1 0ms 16kb Ok! 10 2 1052ms 39172kb Ok! 10 3 860ms 19640kb Ok! 10 4 704ms 26156kb Ok! 10 5 216ms 13720kb Ok! 10 6 0ms 12kb Ok! 10 7 0ms 8kb Ok! 10 8 36ms 896kb Ok! 10 9 0ms 8kb Ok! 10 10 1264ms 39168kb Time limit exceeded. 0 Punctaj total 90 Titlul: Răspuns: 051 Pascal Scris de: Trifan Cristina din Mai 05, 2007, 22:08:30 Cel mai rapid(optim)..cum pot afla la ce putere apare 2 intr-un numar???
Titlul: Răspuns: 051 Pascal Scris de: Ionescu Vlad din Mai 05, 2007, 22:27:18 probabil testezi daca n % 2 == 0 si apoi faci n /= 2
incearca sa faci operatiile astea pe biti: if ( (n & 1) == 0 ) pt modulo si n = (n >> 1) pt impartire cel putin la mine asta a fost problema... Titlul: Răspuns: 051 Pascal Scris de: Trifan Cristina din Mai 05, 2007, 22:33:12 M-am gandit sa fac un vector in care sa retin pt i=1 la r puterea la care apare 2 de ex in i!. Nu ma poate ajuta cineva sa fac cel mai optim(in free pascal)
Titlul: Răspuns: 051 Pascal Scris de: Ionescu Vlad din Mai 05, 2007, 22:35:49 da, faci normal, vezi de cate ori se imparte la 2 cu un while. atata doar ca in loc de impartire la 2 si modulo 2, faci operatiile pe biti pe care ti le-am spus.
64 & 1 == 0, 64 >> 1 = 32 etc.. Titlul: Răspuns: 051 Pascal Scris de: Savin Tiberiu din Mai 06, 2007, 07:38:44 in pascal operatiile pe biti sunt :
& - AND >> - shr Titlul: Răspuns: 051 Pascal Scris de: Trifan Cristina din Mai 06, 2007, 08:53:53 stai mai usor ca nu inteleg ce modulo? si cum se face impartirea pe biti?
Titlul: Răspuns: 051 Pascal Scris de: Savin Tiberiu din Mai 06, 2007, 09:32:45 pai zici ca ai nevoie sa vezi la ce putere apare 2 in descompunerea numarului x. Ei probabil ca u faci ceva de genu
Cod: p:=0; ca sa afli restul lui x la 2 trebuie sa stii cel mai nesemnificativ bit din descompunerea lui (daca e 1 atunci restul e 1, altfel e 0). Spre ex 5 in baza 2 = 101 - ultimul bit e 1 deci restul e 1, 4 in baza 2 = 100 ultimul bit e 0 deci restul e 0. Ca sa afli acest bit poti sa aplici operatorul AND. Astfel: x AND 1 iti va returna 1 daca ultimul bit e 1, 0 in caz contrar, adica intocmai restul care iti trebuie tie. Ptr impartire la 2 trebuie sa faci un shift right (shr) la tot sirul de biti. Spre exemplu 6 = 110. Daca mut toti biti o pozitie spre dreapta voi ajunge la 11 care e 3 (adik exact 6 div 2). Sintaxa ptr asta e : Cod: x := x shr k; DISCLAIMER: nu am mai scris sintaxa pascal de 2 ani asa ca nu sunt raspunzator ptr nici o greseala de sintaxa din acest post :P [later edit] A treia observatie ar trebui putin editata ptr ca felul in care e scrisa akuma se intelege ca 0 e diferit de 1 (lucru care e destul de evident) si nu ca 0 factorial e 1. Titlul: Răspuns: 051 Pascal Scris de: Trifan Cristina din Mai 06, 2007, 09:53:36 Da asa faceam. Dar pt a descompune un numar in puteri de-ale lui 3 cum mai fac? ca banuiesc ca nu mai e buna ideea care ai spus-o
Titlul: Răspuns: 051 Pascal Scris de: Trifan Cristina din Mai 06, 2007, 09:54:31 deci eu am facut asa:
while p mod k=0 do begin inc(nrdiv); p:=p div k; end; dar pt k=3 nu mai merge chestia cu biti nu? Titlul: Răspuns: 051 Pascal Scris de: Savin Tiberiu din Mai 06, 2007, 10:14:37 nu nu mai merge.
Titlul: Răspuns: 051 Pascal Scris de: Trifan Cristina din Mai 06, 2007, 10:29:56 Am facut pt 2 asa cum mi-ai spus:
while j AND 1=0 do begin inc(nrdiv); j:=j shr 2; end; si mi se blocheaza programul. ce nu e bin3? Titlul: Răspuns: 051 Pascal Scris de: Andrei Homorodean din Mai 06, 2007, 10:43:41 Vezi ca trebuie sa faci shr un singur bit, nu doi. Vezi ca scrie mai sus ce face fiecare. Baga-te cu watch, poate nu e de la secventa aia.
Titlul: Răspuns: 051 Pascal Scris de: Trifan Cristina din Mai 06, 2007, 11:08:02 Multumesc Homorodean pt observatie si tie Devilkind!
Acum am luat 100! Titlul: Răspuns: 051 Pascal Scris de: Florian Marcu din Mai 06, 2007, 13:13:54 Eu am ceva de genu` asta:
Cod:
Nu mi se executa niciodata, iar x-ul sigur e par...in watch x&1 imi apare 0, insa nu se executa... :-k Oare ce o avea? {Edit later} M-am uitat mai sus pe forum si mi-am dat seama k nu folosisem paranteze... :aha: Titlul: Răspuns: 051 Pascal Scris de: Taloi Bogdan Cristian din Iunie 08, 2009, 15:49:19 De ce nu pot sa vad "imaginile" din solutia oficiala? :-s Are ceva calculatorul meu sau e un bug? :fighting:
Ce scrie in imaginile alea? Titlul: Răspuns: 051 Pascal Scris de: Paul-Dan Baltescu din Iunie 08, 2009, 16:04:44 Nu e de la tine. Probabil acele imagini s-au pierdut cand a fost mutat site-ul.
Titlul: Răspuns: 051 Pascal Scris de: Constantinescu Adrian din Martie 03, 2014, 22:21:22 nu inteleg de ce primesc la unele teste Killed by signal 8(SIGFPE).
pentru calculare linie folosesc formula data a=fact(n)/(fact(n-j)*fact(j)); pentru factorial folosesc for(int b=1; b<=n; b++) sum=sum*b; am inteles ca eroare este data de o impartire la 0 sau la un overflow? cum sa dea overflow cand prima formula este indicata in enunt si trebuie folosita, iar factorialul este factorial... nu stiu un alt mod de a il calcula. variabilele sunt de tip long. care sa fie buba? |