Pagini: 1 [2]   În jos
  Imprimă  
Ajutor Subiect: 051 Pascal  (Citit de 10575 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #25 : 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... Smile
Memorat
Cristinatrifan
Strain


Karma: -9
Deconectat Deconectat

Mesaje: 15



Vezi Profilul
« Răspunde #26 : 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
« Ultima modificare: Mai 05, 2007, 20:37:25 de către Trifan Cristina » Memorat
Cristinatrifan
Strain


Karma: -9
Deconectat Deconectat

Mesaje: 15



Vezi Profilul
« Răspunde #27 : Mai 05, 2007, 22:08:30 »

Cel mai rapid(optim)..cum pot afla la ce putere apare 2 intr-un numar???
Memorat
Dastas
Vorbaret
****

Karma: 11
Deconectat Deconectat

Mesaje: 170



Vezi Profilul
« Răspunde #28 : 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...
Memorat
Cristinatrifan
Strain


Karma: -9
Deconectat Deconectat

Mesaje: 15



Vezi Profilul
« Răspunde #29 : 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)
« Ultima modificare: Mai 06, 2007, 10:52:25 de către Trifan Cristina » Memorat
Dastas
Vorbaret
****

Karma: 11
Deconectat Deconectat

Mesaje: 170



Vezi Profilul
« Răspunde #30 : 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..
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #31 : Mai 06, 2007, 07:38:44 »

in pascal operatiile pe biti sunt :

& - AND
>> - shr
Memorat
Cristinatrifan
Strain


Karma: -9
Deconectat Deconectat

Mesaje: 15



Vezi Profilul
« Răspunde #32 : Mai 06, 2007, 08:53:53 »

stai mai usor ca nu inteleg ce modulo? si cum se face impartirea pe biti?
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #33 : 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;
while (x mod 2 = 0) do begin x = x div 2;p:=p+1;end;
La sfarsit in variabila p ai exponentul. Ei operatori mod si div sunt destul de inceti. Avand in vedere ca ai impartire la 2 poti folosi operatii pe biti astfel:
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;
k e numarul de pozitii cu care muti sirul. Practic aceasta operatie il imparte pe x la 2^k, in cazul tau k trebuie sa fie 1.

DISCLAIMER: nu am mai scris sintaxa pascal de 2 ani asa ca nu sunt raspunzator ptr nici o greseala de sintaxa din acest post Tongue

[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.
« Ultima modificare: Mai 06, 2007, 09:44:17 de către Savin Tiberiu » Memorat
Cristinatrifan
Strain


Karma: -9
Deconectat Deconectat

Mesaje: 15



Vezi Profilul
« Răspunde #34 : 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
Memorat
Cristinatrifan
Strain


Karma: -9
Deconectat Deconectat

Mesaje: 15



Vezi Profilul
« Răspunde #35 : 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?
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #36 : Mai 06, 2007, 10:14:37 »

nu nu mai merge.
Memorat
Cristinatrifan
Strain


Karma: -9
Deconectat Deconectat

Mesaje: 15



Vezi Profilul
« Răspunde #37 : 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?
Memorat
peanutz
Nu mai tace
*****

Karma: 10
Deconectat Deconectat

Mesaje: 296



Vezi Profilul
« Răspunde #38 : 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.
Memorat

....staind....
Cristinatrifan
Strain


Karma: -9
Deconectat Deconectat

Mesaje: 15



Vezi Profilul
« Răspunde #39 : Mai 06, 2007, 11:08:02 »

Multumesc Homorodean pt observatie si tie Devilkind!
Acum am luat 100!
« Ultima modificare: Mai 06, 2007, 11:43:15 de către Trifan Cristina » Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #40 : Mai 06, 2007, 13:13:54 »

Eu am ceva de genu` asta:

Cod:

while(x&1==0)
{
jj++;
x=x>>1;
}

Nu mi se executa niciodata, iar x-ul sigur e par...in watch x&1 imi apare 0, insa nu se executa... Think Oare ce o avea?

{Edit later} M-am uitat mai sus pe forum si mi-am dat seama k nu folosisem paranteze... Aha
« Ultima modificare: Mai 06, 2007, 13:27:12 de către Marcu Florian » Memorat
taloibogdan
Strain
*

Karma: 19
Deconectat Deconectat

Mesaje: 27



Vezi Profilul
« Răspunde #41 : Iunie 08, 2009, 15:49:19 »

De ce nu pot sa vad "imaginile" din solutia oficiala? Eh? Are ceva calculatorul meu sau e un bug? Fighting
Ce scrie in imaginile alea?
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #42 : Iunie 08, 2009, 16:04:44 »

Nu e de la tine. Probabil acele imagini s-au pierdut cand a fost mutat site-ul.
Memorat

Am zis Mr. Green
Tedi
Strain


Karma: -2
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #43 : 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?
Memorat
Pagini: 1 [2]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines