Вычисление количества ударов

119
16 мая 2019, 01:20

Нужно подсчитать количество потраченых ударов для убийства монстра. На вход поступают: начальный урон [d], увеличение урона при каждом ударе (арифметическая прогрессия, an=a1+d*n) [k], и количество жизней у монстра [hp]. Нужно найти максимально быстро количество ударов.

Ограничение по времени: 1с.

Ограничение по памяти: 256Мб.

Входные данные: 1≤K≤10^3, 1≤D≤10^5, 1≤hp≤10^15

У меня есть набросок кода, но он по времени не успевает обрабатывать.. Данные подаются с Файла (input.txt), выход в другой файл (output.txt);

#include <fstream>
using namespace std;
int main()
{   
    ifstream fin ("input.txt");
    unsigned long long  res = 0,dn,res_n;
    long double hp;
    int k, d;
    fin >> k >> d >> hp;
    res_n = 0;
    while (hp>0){
        hp = hp - d;
        d = d + k;
        res_n++;
    }
    res =res_n;
    ofstream fout;
    fout.open("output.txt");
    fout << res;
    fout.close();
    return 0;
}
Answer 1

сумма арифм. прогрессии:

d*n^2 +(2*a - d)*n - 2*Sn = 0

дискриминант: D = (2*a - d)^2 + 8*d*Sn

n = (sqrt(D) - 2*a + d) / 2*d

"n" округлить в верхнюю сторону

P.S. тут указаны общие формулировки, вот названия из твоего проекта
мои переменные -- переменные из кода
a == d
d == k
Sn == hp

READ ALSO
Что это значит `str[i]!=(char)NULL`?

Что это значит `str[i]!=(char)NULL`?

Что это значит str[i]!=(char)NULL?

137
Не хочет инициализироваться поток

Не хочет инициализироваться поток

Каждый параметр абсолютно верен, но почему-то вызывается exception в std::invokeКод: Вызываемая функция:

129
Отключить возможность перемещения Confirm Dialog мышью

Отключить возможность перемещения Confirm Dialog мышью

Всем привет, Хочу сделать так, чтобы Confirm dialog (окно) невозможно было перемещать мышью

115
Программа не заканчивает свою работу

Программа не заканчивает свою работу

Задали нам задачу, сделать игру с нахождением одинаковых карточек, наверняка все игралиТы кликаешь на одну карточку, потом на другую и, если...

135