Rubabandiera v2 (45/100)

Stavo cercando di fare il problema “Rubabandiera v2”, e il codice risolve bene i subtask 1, 2, e 3 anche in poco tempo, ma con i subtask 4 e 5 non ne fa neanche uno e genera un’errore (errore 8) che dice essere causato dal superamento del limite della memoria, ma poi guardando la memoria utilizzata si vede che è molto inferiore del limite. Non ho la minima idea di dove possa essere l’errore.

#include <iostream>
using namespace std;

int potenza(int base, int ex)
{
    long long r = 1;
    for (int i=0; i<ex; i++){
        r *=(long long)base;
    }
    return r;
}

long long edo(long long n)
{
    int exp = 0;
    long long m = n;
    while (n!=1){
        n /= 2;
        exp++;
    }
    long long log = potenza(2, exp);
    return 2*(m%log);

}

int main()
{
    long long n;
    cin >> n;
    long long a;
    for (long long i=0; i<n; i++){
        cin >> a;
        cout << 1+edo(a) <<endl;
    }
    return 0;
}

La funzione potenza deve essere un long long, altrimenti hai problemi di overflow sul risultato. Credo che l’errore sia dovuto al modulo, dato che log può diventare negativo per l’overflow.

Grazie sì l’errore era int al posto di long long, ora 100/100

1 Mi Piace