Examroom - Aiuto

Ciao, qualcuno mi potrebbe suggerire se il problema con questa soluzione (20/100, solo 5 subtests sbagliati) è legato ai tipi di variabile che ho usato o alla logica del programma? Grazie

#include <bits/stdc++.h>

int main()
{
    std::ifstream ifs("input.txt");
    std::ofstream ofs("output.txt");

    long double R, C, K;
    ifs >> R >> C >> K;

    long long result = ceil(R / K) * ceil(C / K);

    ofs << result;

    return 0;
}

P.S. Come si fa ad evidenziare il codice?

Per evidenziare il codice usa ``` , il carattere sarebbe l’accento grave: vedi qui per informazioni
Per i tipi di variabile è sempre consigliato usare interi, dato che altrimenti possono essere fatte delle approssimazioni non necessarie.
Comunque il problema non credo sia quello. Prova a spiegare il ragionamento che ti porta a fare quella moltiplicaizione

1 Mi Piace

Prova a convertire in long long ceil(R/K) e ceil(C/K) prima di moltiplicarli:

long long result = ((long long )ceil(R / K))* ((long long)ceil(C / K));

Devi aggiungere *1.0 altrimenti il risultato della divisione sarà un intero approssimato sempre per difetto dato che se dividi due interi es 7/2=3,5 C++ approssima automaticamente per difetto almeno che non li trasformi in float con questo piccolo trucco.

// mettere un cast a long long non fà mai male, seppur non dovrebbe esser necessario
ris=(long long)ceil(R*1.0/K)*(long long)ceil(C*1.0/K)

Fidati io ho fatto così e a me funziona

Nota che ho dichiarato R, C, e K come long double: per questo non è necessario moltiplicare per 1.0.

Con questo suggerimento ho fatto 100; tuttavia non capisco perché senza il cast alcuni output siano sbagliati. Forse, in certi casi, il prodotto tra due long double va in overflow, mentre tra i corrispettivi long long non succede.

io long double non l’ho mai usato in nessun problema, infatti non so come si comporti quel type