1

Тема: задача 1205 з eolimp

Умова задачі - https://www.e-olymp.com/uk/problems/1205

Мій код:

#include <cmath>
#include <iostream>

using namespace std;

int main()
{
    double n, p;
    cin >> n >> p;
    cout << pow(p, 1 / n);
}

Вибиває, що код пройшов тільки 75 % перевірок.
Що не так? Можливо там якась загвоздка в умові задачі?

2

Re: задача 1205 з eolimp

умова написав:

завжди існує таке ціле k

Тобто відповідь завжди має бути цілою. У вас, швидше за все, виходить щось на кшталт 73.0000000000000003 чи 85.999999999999999995 замість 73 та 86 відповідно.
Утім, навіть цього, можливо, буде недостатньо. Точності double на розрізнення чогось на кшталт (10^9+1)^10 та (10^9+2)^10 може не вистачити, зараз ліньки точно рахувати.

Подякували: Eff1c1

3

Re: задача 1205 з eolimp

Перевірив - (long long)round(pow(p, 1 / n)) їм достатньо.

Подякували: Eff1c1

4

Re: задача 1205 з eolimp

koala написав:

Перевірив - (long long)round(pow(p, 1 / n)) їм достатньо.

зробив так

#include <cmath>
#include <iostream>

using namespace std;

int main()
{
    double n, p;
    cin >> n >> p;
    cout << int(pow(p, 1 / n) + 0.5);
}