Learning Algorithms

アルゴリズムの勉強メモ

Atcoder Regular Contest 054 B. ムーアの法則

Atcoder Regular Contest 054 B. ムーアの法則

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

感想

はじめて三分探索を書いた。凸関数の解を求めるときに使えるやつ。零点が手で計算できるときはそっちの方が良いんだと思う。

解法

三分探索で、はい。
一般的な書き方は知らないので、とりあえず動くように適当に書いた。

実装
#include "bits/stdc++.h"
using namespace std;

static const int INF = 0x3f3f3f3f;

int main() {
        double p;
        cin >> p;
        double lb = 0, ub = (double) INF;
        int loop = 1000;
        double newp_left, newp_right;
        while (loop --) {
                double left = lb + (ub - lb) / 3.0;
                double right = lb + (ub - lb) * 2.0 / 3.0;
                newp_left = left + p / pow(2.0, left / 1.5);
                newp_right = right + p / pow(2.0, right / 1.5);
                if (newp_left < newp_right) ub = right;
                else lb = left;
        }
        cout << setprecision(15) << newp_right << endl;
        return 0;
}