Problemã secvențã
Last Updated: Mar 21 2017 17:54, Started by
Baggins
, Mar 13 2017 17:46
·
0
#19
Posted 21 March 2017 - 16:08
Nu se executa nimic in gol. Invata sa faci debug corect. Pune doar cate o comanda/conditie pe linie. Dupa ce i=2, se verifica din nou conditia. Prima parte din conditie implica i si un sir. Acolo se produce OOB de care vorbeam. In mod norocos, nu-ti crapa programul. Dar astea sunt conditii de crapat. Faptul ca intamplator programul merge, nu inseamna ca e si corect.
Nu toate problemele au aceeasi complexitate. In cazul de fata se poate face intr-un timp relativ mai scurt. Iti dau niste indicatii, nu chiar pseudo-cod de care amintea Marian. Insa am lasat deoparte cea mai complicata parte (si anume existenta 0-urilor la inceput, respectiv la sfarsit de sir). Ne situam in cazul dat de Marian, cand numerele initiale au fost inlocuite cu log2 sau cu -1 in caz contrar. Am pus doar ideea principala, fara alte verificari (element<-1). - cat timp suma<tinta, avanseaza index_final si adauga elementul de la index_final - cat timp suma>tinta, scade elementul de la index_initial si avanseaza index_initial |
#20
Posted 21 March 2017 - 17:54
Nu vreau s-o fac mai eficientă deocamdată.
Vreau doar să înțeleg ce nu e bine la ce am făcut eu, că nu înțeleg. Ok, dupa ce i=2, se verifică din nou, și? Nu mai intră pe while. unsigned Secventa(long long x[], long n, unsigned k) { unsigned nr=0,s,start; long i,exp[n]; for(i=0; i<n; i++) if(isPowerOf2(x[i])) exp[i]=log2(x[i]); else exp[i]=-1; i=0; while(i<n) { while(exp[i]==-1 && i<n) i++; s=0; start=i; while(exp[i]!=-1 && i<n && s<k) { s+=exp[i]; i++; } if(s==k) nr++; i=start+1; } return nr; }Am ajuns la așa ceva, care cred că și ăsta produce fenomenul straniu. p.s. while (i < n){ while ((i < n) && (a[i] == 0)){ i = i + 1; } int inceput = i; while ((i < n) && (a[i] > 0)){ i = i + 1; } if (i < n){ nr++; int sfarsit = i - 1; if (maxSf - maxInc <= sfarsit - inceput){ maxInc = inceput; maxSf = sfarsit; } }Și aici se produce OOB? Edited by Baggins, 21 March 2017 - 18:12. |
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users