Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Incalzire in pardoseala etapizata

Suprataxa card energie?!

Cum era nivelul de trai cam din a...

probleme cu ochelarii
 Impozite pe proprietati de anul v...

teava rezistenta panou apa calda

Acces in Curte din Drum National

Sub mobila de bucatarie si sub fr...
 Rezultat RMN

Numar circuite IPAT si prindere t...

Pareri brgimportchina.ro - teapa ...

Lucruri inaintea vremurilor lor
 Discuții despre TVR Sport HD.

Cost abonament clinica privata

Tremura toata, dar nu de la ro...

Renault Android
 

Problemã secvențã

- - - - -
  • Please log in to reply
19 replies to this topic

#19
Cy_Cristian

Cy_Cristian

    Active Member

  • Grup: Members
  • Posts: 1,845
  • Înscris: 22.02.2009
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
Baggins

Baggins

    Member

  • Grup: Members
  • Posts: 264
  • Înscris: 09.10.2014
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

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate