[AtCoder] D. 2-variable Function [Beginner Contest 246]
📚 質問する
https://atcoder.jp/contests/abc246/tasks/abc246_d
📖 に答える
初めて問題を見た時、Nの最値と問題の内容を見て、バイナリ検索で接近したが、解決しなかった.
これは二重ポインタで解決した問題です.
nは大きいが、aおよびbの最値は10の18平方ではなく、10以下の6平方である.Nの最値は10の18平方であるため、Xが10の18平方である場合、aが10の6平方bが0である場合が可能である.そのため、最高価格は10の6平方です.
二重ポインタを利用するために,aとbのbをより大きな値に固定する.どうせaとbの値を変えるのは同じで、bがもっと大きいか等しい限りいいです.
a 0 bを10の6回にとり、投点を開始します.
aとbを問題とする演算
a ** 3 + a * a * b + a * b * b + b ** 3
は、結果がn以上であれば1つのbが減少し、それ未満であればaが増加する.この過程を繰り返すと,aがbを超えると終了する.n以上の場合、最小値に更新されます.
📒 コード#コード#
def f(a, b):
return a ** 3 + a * a * b + a * b * b + b ** 3
n = int(input())
s = 0
e = 10 ** 6
min_result = 100000000000000000000
while s <= e:
result = f(s, e)
if result >= n:
min_result = min(min_result, result)
e -= 1
else:
s += 1
print(min_result)
🔍 結果
Reference
この問題について([AtCoder] D. 2-variable Function [Beginner Contest 246]), 我々は、より多くの情報をここで見つけました https://velog.io/@yunhlim/AtCoder-D.-2-variable-Function-Beginner-Contest-246テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol