From: | "Mihai Patrascu" <mihai_p@pcnet.ro> | Block Address | Add to Address Book |
To: | "probleme" <probleme@ldc.ro> |
Subject: | probleme mai vechi |
Date: | Tue, 10 Apr 2001 13:34:38 +0300 |
|
|
--- combinari de N luate cate K ---
Ce propune Cristi nu prea are logica, deoarece numerele pe care vrea sa
le-nmulteasca nu sunt intregi.
Rezolvarea in care inmultesti numerele de la N-K+1 la N si apoi imparti
la
1..K nu e prea grozava. O idee pe care am implementat-o pe la cateva
loturi
ar fi sa factorizezi. Tii un tabel cu toate numerele prime pana la N si
in
loc sa inmultesti (sau sa imparti) cu X adaugi (sau scazi) in tabel
puterile
la care apar numerele prime in X. La final, inmultesti toate nr prime
la
puterea rezultata. Totusi, nici asta nu intra in timp.
Ideea e ca pentru N! se poate determina la ce putere apare un numar
prim P.
E ceva de genul N/P + N/P**2 + N/P**3... Pentru fiecare numar prim
determini
la ce putere apare in N!, scazi puterile pt K! si (N-K)! si il
inmultesti la
puterea rezultata. Bineinteles, baza 10**9.
--- Belman-Ford pe reale ---
Mai demult a fost o discutie despre problema cauzata de precizie la
implementare. Cineva a zis ca o solutie buna si portabila ar fi:
tmp = a[i] + d[i][j];
if(tmp < a[j]) ...
Atunci chiar am zis ca merge, dar curand mi-am dat seama ca nu merge si
de
atunci tot uit sa va zic. Mai mult ca sigur ca nu merge. Compilatorul
va
optimiza cele doua accese la tmp si va pastra valoarea in registru cu
precizia maxima. ANSI C nu numai ca permite asta, dar si incurajeaza.
Tocmai
de asta a fost creat volatile. Daca vrei sa mearga, trebuie sa declari
tmp
ca fiind volatile. Dar asta iti va incetini groaznic codul.
--- Joc logic ---
Mihai Stroe are dreptate. E cam ca problema aia din 96. Faci NIM pe
distantele intre piatra 1 si 2, 3 si 4, 5 si 6 etc. Daca N e un numar
impar,
shiftezi table la dreapta cu 1 si adaugi o piatra in pozitia 1.
Inca o observatie pentru Mihai. Nu suntem la colegiul tau sa faci pe
profu
cu noi. Suntem programatori seriosi si desi nu suntem la nivelul tau,
nu
suntem nici noi prea slabi :-). Cine trimite o problema poate chiar are
nevoie de o rezolvare rapid. Asa ca nu fa chestii d'astea cu va trimit
peste
3 zile, va mai las sa va ganditi etc. Cine nu are nevoie urgenta de
rezolvare poate sa isi ia un timp de gandire inainte sa citeasca
rezolvarea.
As sugera orice RE: care include o rezolvare sa includa si [solutie] in
subject, ca sa nu-l citim daca vrem sa ne mai gandim putin (RE:-urile
fara
[solutie] ar putea cere clarificari si p-alea tre sa la citim). Oricum,
daca
scrii solutia imediat evitam si fazele alea jenante in care ne tii trei
zile
ca ai o solutie si apoi zici ca de fapt cand te-ai apucat sa scrii
ti-ai dat
seama ca iti scapa ceva.
mihai_p
Privacy Policy-
Terms of Service
-
Guidelines
Copyright © 1994-2001
Yahoo! Inc. All rights reserved.