Pentru realizarea algoritmului am utilizat următoarele variabile:
- n1,n2,n3, cele 3 variabile short, precizate și cu valoarea în/din enunț, pentru care am alocat câte 2 octeți de fiecare;
- p, vectorul de short (frecvență a numerelor din intervalul [10,10^3] în fișierul <bac.txt>), în care am pus aparițiile poziției în vector, pentru care am alocat 2*1001 octeți;
- i1, o variabilă short pe care am utilizat-o pentru citirea din vector și pentru memorarea celui mai mare preț pentru premiile I;
- i2, o variabilă short pe care am utilizat-o pentru maximul dintre n1,n2 și n3, precum și pentru memorarea celui mai mare preț pentru premiile II;
- i3, o variabilă short pe care am utilizat-o pentru memorarea celui mai mare preț pentru premiile III;
- pentru fiecare i1,i2 și i3 am alocat câte 2 octeți.
În concluzie, variabilele folosite utilizează o memorie de 3*2+2*1001+3*2=12+2002=2014 octeți, de unde rezultă EFICIENTA UTILIZĂRII MEMORIEI (pe lângă variabila utilizată pentru fișier).

În prima parte a algoritmului am citit n1,n2 și n3 din fișier.
În i2 am memorat maximul dintre n1,n2 și n3.
În i1 am citit toate prețurile din fișier, actualizând valoarea p[i1] din vector (prin creștere cu 1), dar fără a depăși i2 calculat conform precizărilor de mai sus.
După finalizarea acestei etape am parcurs în ordine:
- cu i1 de la 1000 la 10, toate pozițiile de prețuri pentru a găsi care sume ne sunt suficiente pentru acordarea premiilor I, respectiv a-l găsi pe p[i1] care are o valoare mai mare sau egală cu n1;
- cu i2 de la i1-1 la 10, toate pozițiile de prețuri pentru a găsi care sume ne sunt suficiente pentru acordarea premiilor II, respectiv a-l găsi pe p[i2] care are o valoare mai mare sau egală cu n2;
- cu i3 de la i2-1 la 10, toate pozițiile de prețuri pentru a găsi care sume ne sunt suficiente pentru acordarea premiilor III, respectiv a-l găsi pe p[i3] care are o valoare mai mare sau egală cu n3.
Dacă i3 a ajuns să fie o valoare mai mare decât 9 înseamnă că am găsit toate cele 3 prețuri: i1, i2 și i3, pe care le afișăm în ordine; în caz contrar afișăm mesajul "nu exista".
În acest fel am EFICIENTIZAT TIMPUL DE EXECUȚIE, algoritmul fiind unul liniar, complexitatea algoritmului fiind maxim 3+N+990 (unde 3 sunt valorile n1,n2 și n3, N este numărul celorlalte valori din fișier, iar 990 maximul căutărilor efectuate în vectorul p pentru a găsi valorile solicitate) = O(n) + 993 = O(N) + C (constantă) = O(N), de unde rezultă liniaritatea algoritmului.