http://pl.spoj.com/problems/GLUTTON/
Zadanie mam praktycznie zrobione, oto mój kod:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float pudelka, czasy[10000], N, M;
int ile, j;
cin>>ile;
for(int i=0; i<ile; i++)
{
cin>>N>>M;
j=0;
pudelka=0;
do
{
cin>>czasy[j];
pudelka+=(24/(czasy[j]/3600))/M;
j++;
} while(j<N);
cout<<ceil(pudelka)<<endl<<endl;
}
return 0;
}
Jednak jest mały problem. Wpisuję wejścia zgodnie z tymi podanymi na stronie i wychodzi mi dobry wynik dla pierwszego testu, jednak dla drugiego już nie do końca. Na stronie wynik wynosi 2, u mnie pokazuje 3, gdyż bez "ceil" wychodzi niby 2.00452. Domyślam się, że może się tak dziać z powodu przybliżeń (w którymś działaniu jak patrzyłem na kartce był wynik okresowy po przecinku). Natknąłem się też na troszkę inny wzór obliczania ilości tych pudełek: N.push_back((((3600 / czas) * 24) + ciastka - 1) / ciastka); ale nie mam pojęcia, skąd się to bierze i jak można było wpaść na ten wzór :P. Tak więc mam 2 pytanka:
- Da się ten problem rozwiązać moim sposobem, wprowadzając jakieś lekkie modyfikacje czy jest on z góry skazany na porażkę ze względu na te przybliżenia lub przez coś innego, czego nie widzę?
- Jak ten drugi wzór został wyprowadzony? W ogóle go nie rozumiem.