mayoko’s diary

プロコンとかいろいろ。

AtCoder Regular Contest 054 B - ムーアの法則

解法

凸関数 + 凸関数 という形になっているので, 全体としても凸関数です。ということで三分探索をしましょう。

int main() {
    double P;
    cin >> P;
    double l = 0, r = 1e18;
    auto f = [&](double x) {
    	return x+P/pow(2, x/1.5);
    };
    for (int i = 0; i < 200; i++) {
    	double m1 = (2*l+r)/3, m2 = (l+2*r)/3;
    	if (f(m1) < f(m2)) r = m2;
    	else l = m1;
    }
    printf("%.10lf\n", f((l+r)/2));
    return 0;
}