Postări

Coada Coada vidă:   p>u   int C[1001], p, u;   p = 1; u = 0;      //coada e vidă   int inserare(int C[], int p, int &u, int x) {             if(u < l)              //coada nu e plină             {                         u++;                         C[u] = x;                         return 1; } return 0 }   int extragere(int C[], int &p, int u, int &elemExtras) { if(p<=u)            //coada nevidă             {                         elemExtras = C[p];                         p++;                         return 1; } return 0; }   int main() {        int l;               cin >> l;         inserare(C, p, u, 8);        inserare(C, p, u, -2);        inserare(C, p, u, 5);        extragere(C, p, u, x);        extragere(C, p, u, x);        inserare(C, p, u, 10);        extragere(C, p, u, x); }
  4 6 2 5 8 1 3 7   Citim n. n=8. Intrăm în for. i=1. (1<8=>i≤n). Continuăm for-ul (s-a respectat condiția). Citim x. x=4. st=1, dr=cnt=0. (1>0=>st>dr). Nu intrăm în while (nu s-a respectat condiția). (1>0=>st>cnt). Intrăm în al doilea if (s-a respectat condiția). a[++cnt]=a[0+1]=a[1]=x=4. Postincrementăm i. (2<8=>i≤n). Continuăm for-ul (s-a respectat condiția). Citim x. x=6. st=1, dr=cnt=1. (1=1=>st≤dr). Intrăm în while (s-a respectat condiția). m=(st+dr)/2=(1+1)/2=2/2=1. (4<6=>a[1]<6=>a[m]<x). Intrăm în primul if (s-a respectat condiția). dr=m-1=1-1=0. (1=1=>st≤cnt). Nu intrăm în al doilea if (nu s-a respectat condiția). Intrăm în else. a[st]=a[1]=x=6. Postincrementăm i. (3<8=>i≤n). Continuăm for-ul (s-a respectat condiția). Citim x. x=2. st=1, dr=cnt=1. (1=1=>st≤dr). Intrăm în while (s-a respectat condiția). m=(st+dr)/2=(1+1)/2=2/2=1. (6>2=>a[1]≥2=>a[m]≥x). Nu intrăm în primul if (nu s-a respectat condiți
  #include <iostream>   using namespace std;   const int VALMAX = 1000000;   bool atins[1 + VALMAX]; int last[1 + VALMAX];   int a, b;   int frecvA = 0; int frecvB = 0;   void restaurareSolutie(int poz) {     if (poz == -1)         return;       if (poz - last[poz] == a)         frecvA++;     else if (poz - last[poz] == b)         frecvB++;       restaurareSolutie(last[poz]); }   int main() {     int n;     cin >> n >> a >> b;       atins[0] = true;     last[0] = -1;       for (int i = 0; i <= n; i++)     {         if (atins[i])         {             if (i + a <= n)             {                 atins[i + a] = true;                 last[i + a] = i;             }         }     }       for (int i = 0; i <= n; i++)     {         if (atins[i])          {             if (i + b <= n && !atins[i + b])             {                 atins[i + b]