Тут геометрическая прогрессия. Из формулы суммы n членов геометрической прогрессии у меня получилось что-то такое:
h = floor( log(1. - (1.-b)*MAX/(double)a1) / log((double)b)); // в h количество тарелок при которых sum <= MAX
if(h > n)
cout << n << std::endl;
else
cout << h << std::endl;
Илья Петров, какое конкретно MAX в другой задаче? 10^1000 - это слишком большое число, оно не влезет даже в int64.
Свой вариант я проверил на нескольких разных входных данных, результат пересчитывал вручную.
Дайте конкретные входные данные на которых выдается не верный результат, я проверю.