結果

問題 No.1042 愚直大学
コンテスト
ユーザー Theta
提出日時 2022-10-07 15:17:11
言語 Python3
(3.14.3 + numpy 2.4.2 + scipy 1.17.0)
コンパイル:
python3 -mpy_compile _filename_
実行:
python3 _filename_
結果
AC  
実行時間 921 ms / 2,000 ms
コード長 1,184 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 710 ms
コンパイル使用メモリ 20,952 KB
実行使用メモリ 35,016 KB
最終ジャッジ日時 2026-03-05 03:53:22
合計ジャッジ時間 25,958 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 23
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

from collections import deque
from math import log2, log
import numpy as np
from random import random


class DiffSolveTime:
    def __init__(self, p: int, q: int):
        self.__p = p
        self.__q = q

    def diff_solve_time(self, n: int | float) -> float:
        return n ** 2 - self.__p - self.__q * n * log2(n)

    def diff_solve_time_derived(self, n: int | float) -> float:
        return n * 2 - self.__q * log2(n) - self.__q / log(2)

    def diff2_solve_time_derived(self, n: int | float) -> float:
        return 2 - self.__q / (n * log(2))

    def get_inflection(self) -> float:
        return self.__q / (2*log(2))


def main():
    P, Q = map(int, input().split())

    solver = DiffSolveTime(P, Q)
    N = 1e2
    ans_deque = deque(maxlen=2)
    while solver.diff_solve_time(N) < 0:
        N *= 10

    counter = 0
    while abs(solver.diff_solve_time(N)) > 1e-6 and counter < 5:
        if N in ans_deque:
            N = np.mean(ans_deque)
            counter += 1
            continue
        ans_deque.append(N)
        N -= (solver.diff_solve_time(N) /
              solver.diff_solve_time_derived(N))

    print(N)


if __name__ == "__main__":
    main()
0