Zadanie ze SPOJ, SKO, błędne wyniki

0

Rozwiązuję zdanie ze SPOJ: http://pl.spoj.pl/problems/SKO/
"Na kartce" problem jest banalny, wydaje się, że w zakodowaniu też, ale mam problem.
Kod na ideone: http://ideone.com/IDpyB
Niby się wykonuje, ale wyniki się nie zgadzają, gdzie mogłem popełnić błąd ?

1

Nie możesz wykonywać obliczeń na liczbach zmiennoprzecinkowych, bo tracisz precyzję i wyniki mogą być lekko rozbieżne. Operuj wyłącznie na liczbach całkowitych. Trzeba to robić z głową. Zapewne zastanawiasz się jak policzyć pierwiastek. Otóż nie liczyć wcale. Skoro
\sqrt[k]{x}=4
to
x=4^k

1

Wydaje mi się że powinieneś nadać wartość początkową zmiennej tmp. Deklarujesz ją a potem przy jej użyciu sumujesz. Na początku mogą tam być jakieś śmieci.

0
emilios8 napisał(a):

Wydaje mi się że powinieneś nadać wartość początkową zmiennej tmp. Deklarujesz ją a potem przy jej użyciu sumujesz. Na początku mogą tam być jakieś śmieci.

Po tej poprawce niby jest "częściowo" dobrze, bo dla 2 i 3 przypadku testowego jest poprawny wynik. http://ideone.com/riGud

Czyli mogę skorzystać z tej nierówności: \sum_{i=1}<sup>{n}a_{i}</sup>{k} \ge n \cdot 4^{k}

1

Musisz w każdym razie wrócić do liczb całkowitych.
Od razu pomyśl o efektywności, nie podnoś ocen do k-tej potęgi za każdym razem na nowo tylko domnażaj czynnik z każdą pętlą:

for (k = ...) {
    for (i = ...) {
       //źle
       //suma += poteguj(tab[i], k);

       //dobrze
       iloczyn[i] *= tab[i];
       suma += iloczyn[i];
       // tablicę "iloczyn" wstępnie wypełnij jedynkami
   }
}

powinno wystarczyć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1