Нужно подсчитать количество потраченых ударов для убийства монстра. На вход поступают: начальный урон [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;
}
сумма арифм. прогрессии:
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
Виртуальный выделенный сервер (VDS) становится отличным выбором
Каждый параметр абсолютно верен, но почему-то вызывается exception в std::invokeКод: Вызываемая функция:
Всем привет, Хочу сделать так, чтобы Confirm dialog (окно) невозможно было перемещать мышью
Задали нам задачу, сделать игру с нахождением одинаковых карточек, наверняка все игралиТы кликаешь на одну карточку, потом на другую и, если...