Kfree... Cosa mi sfugge?

Sto risolvendo questo problema, ma non riesco ad andare oltre gli 80/100!

E’ semplice, ma non so dove sbaglio o cosa mi sfugga.
La mia idea è quella di “contare” quante coppie di numeri non posso capitare insieme. Una volta stabilito questo numero (che io ho chiamato “ric”), il risultato sarà dato da N-ric.

Il codice della procedura risolutiva è questo:
int solve(){
if(k==1)
return 0;
if(N==1)
return 1;
sort(a, a+N);
int ric = 0;

for(int i=0, prev=1; i<N; i++)
    for(int j=prev, val = a[i]*k; j<N; j++)
        if(val <= a[j]){
            prev=j;
            if(val==a[j]){
                ric++;
                prev++;
            }
            break;
        }
return N-ric;

}

“prev” è l’indice dal quale la volta dopo il ciclo dovrà partire. Infatti l’array è ordinato in ordine crescente ed ogni elemento è univoco, perciò una volta trovato un valore minore o uguale di a[i]*k bisognerà partire da quello (se è minore) o da quello successivo (se l’abbiamo trovato).


Sto sbagliando a fissarmi troppo su questo algoritmo oppure anche qualcun altro l’ha risolto in questo modo?

Un valore maggiore o uguale comunque, ho sbagliato a scrivere!

Molto probabilmente sbaglia nel caso tipo:
3 3

1 3 9

Il tuo programma probabilmente fa come output 1, mentre invece è 2

Giusto, non ho considerato quando un elemento  sta in più di una ricorrenza. Grazie mark