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