Ois_cabala 30/100

Buongiorno. Ho provato a risolvere il problema ois_cabala. Tuttavia mi da solo 30/100 con gli ultimi output sbagliati. Ho provato a riscriverlo varie volte è questa mi sembrava la migliore. Qualcuno saprebbe dirmi dov’è l’errore?

#include<iostream>
#include<queue>
#include<string>
#include<assert.h>

using namespace std;

void num_cabala(int N, int M, int C, priority_queue<int> &q)
{
    if(N == 0) return;

    string c = to_string(C);

    q.push(C%M);

    if(c[c.size()-1] == '3')
    {
        num_cabala((N-1), M, C*10+6, q);
        num_cabala((N-1), M, C*10+9, q);
    }else if(c[c.size()-1] == '6'){
        num_cabala((N-1), M, C*10+3, q);
        num_cabala((N-1), M, C*10+9, q);
    }else{
        num_cabala((N-1), M, C*10+3, q);
        num_cabala((N-1), M, C*10+6, q);
    }
}

int occulta(int N, int M)
{
    priority_queue<int> q;

    num_cabala(N, M, 3, q);
    num_cabala(N, M, 6, q);
    num_cabala(N, M, 9, q);

    return q.top();
}

int main()
{
    FILE *fr, *fw;
    int T, N, M, i;

    fr = fopen("input.txt", "r");
    fw = fopen("output.txt", "w");
    assert(1 == fscanf(fr, "%d", &T));
    for (i=0; i<T; i++) {
        assert(2 == fscanf(fr, "%d %d", &N, &M));
        fprintf(fw, "%d ", occulta(N, M));
    }

    fprintf(fw, "\n");
    fclose(fr);
    fclose(fw);
    return 0;
}

Devi fare attenzione alla variabile che usi per il numero C.
Il tuo codice funziona finché N <= 5, ma nei subtask 3 e 4 N può essere più grande

Grazie mille, ora fa 100/100.

1 Mi Piace