Afişează mesaje
|
Pagini: 1 ... 9 10 [11] 12 13
|
253
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 957 Jap2
|
: Septembrie 10, 2012, 17:12:53
|
Salut! Am rezolvat problema astfel : - am determinat puterea la care apare P in N! in O ( log P N ) , folosind o formula; - am gasit , daca mai este cazul , N! % P ignorand toti factorii lui P din N! , in O (log P N * log 2 P ). Primul logaritm vine de la descompunerea lui N! in factoriale mai mici care se repeta din P in P , iar al doilea de la ridicare la putere. Am incercat si ridicarea la putere pe biti insa nu reusesc sa scap de TLE pe 11 teste. Operatiile necesare le fac pe long long , iar operatia rest nu imi dau seama cum s-o inlocuiesc cu scadere.
Ce as mai putea optimiza pentru ca sursa sa intre in timp? ( am citit solutia oficiala si are aceasi complexitate , l-am rugat pe Popa Mihai sa trimita sursa lui care lua 100 si acum primeste 70). Multumesc anticipat!
|
|
|
255
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 954 Tester
|
: August 10, 2012, 16:21:12
|
Se mai poate lua 100 de puncte? Eu folosesc algoritmul pentru ciclu eulerian , iterativ, identic cu cel care ia 100 in arhiva educatonala si am TLE pe testul 8. Am implementat liste simplu inlantuite manual si TLE - ul ramane.
Am luat pana la urma 100 de puncte inlocuind doar listele care nu erau necesare cu vectori alocati static.
|
|
|
257
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 258 Alpin
|
: August 09, 2012, 14:04:56
|
Tu iei incorect pentru ca abordarea ta este gresita. In primul rand trebuie sa faci un fel de Bellman-Ford adica in conditia asta : if( ii>=1 && jj>=1 && ii<=n && jj<=n && a[i][j] < a[ii][jj] ) { d[ii][jj]=d[i][j]+1; Q.push(mp(ii,jj)); }
Mai trebuie sa adaugi d[ ii ] [ jj ] < d[ i ] [ j ] + 1 si cred ca merge.In al doilea rand nu inteleg de ce introduci in coada casutele care au toti vecinii mai mici.Pentru exemplul tau respunsul corect este : Deci incepe in 1,3 pe care tu nu il introduci in coada. Insa oricum vei lua TLE pe cateva teste. Eu am rezolvat folosind dinamica cu memoizare. Daca nu te prinzi da-mi un PM.
|
|
|
260
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 067 Triang
|
: Iulie 25, 2012, 14:38:37
|
Stii panta dreptrei (si neaparat un punct A care apartine dreptei, eventual mijlocul segmentului). Ai formula care spune ca daca doua drepte sunt perpendiculare atunci produsul pantelor este -1, deci afli panta noii drepte. Cunosti panta si un punct <=> ecuatia dreptei este d : y-yA=md(x-xA) . Insa abordarea este greoaie si se poate pierde precizie . Daca ai notiuni de baza despre numere complexe , stii condititia ca un triunghi sa fie echilateral si gradul de dificultate al problemei se reduce foarte mult.
|
|
|
263
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 171 Sum
|
: Iulie 07, 2012, 14:34:19
|
Pentru ca tipul int lucreaza pe 32 de biti, iar long long pe 64. Astfel ca la fiecare operatie de inmultire, adunare , atribuire , etc. , procesorul are mai multi biti de prelucrat. Deci long long este mult mai incet decat int ,dar foarte folositor in unele cazuri.
|
|
|
264
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 576 Puteri2
|
: Iulie 05, 2012, 15:04:25
|
Multumesc amandurora pentru indicatii. O sa incerc sa vad ce iese.
PS : Am citit solutia oficiala pana la urma si am gasit 3 optimizari propuse : pe primele 2 le am deja, iar a treia : in cazul cautarii binare, intervalul initial de cautare nu trebuie sa fie [1,N], ci un interval mai restrans (de exemplu, [10 la (X/P)-1, 10 la (X/P)+1]), unde X este numarul de cifre ale numarului N dat. Nu imi dau seama de ce afirmatia este adevarata ( daca am baza 10000 atunci trebuie 10000 la puterile respective ) . Astfel scap de TLE dar iau incorect.
|
|
|
|