bin使ったらいい感じになった(ABC68B)
こんにちは。えんぴつです。
今日はABC68BのBreak Numberを解きました。
自分の解答
途中までその数が何回まで割れるかを答えよって問題だと思ってたのでタイムロスしましたが、けっきょくそのために実装してたプログラムをそのまま使えたしいいかなと。
それがこれですね。
A=int(input())
B=bin(A)
B=B[::-1]
ans=len(B)-3
print(2**ans)
#AC 27ms
binを使うと2進数になるんですが、返り値が’0bXXXX’という感じで文字列かつ文頭に0bがつくことに注意ですね。それで、2進数にすると(桁数-1)回だけ2で割れるということがいえるので桁数から0bの2文字と1をひいたのがans=の部分です。で、最終的に2のans乗が答えといえるわけで。
…三行目は完全に要らなかったですね。読み飛ばしてください。(消して再提出したら23msになりました)
ちなみに16msの解法を見てみたら2のn乗より大きいかをfor文で回してみるみたいな感じでした。N<=100を利用しててrange(7)で調べてたみたいですが、数が大きいと少し大変になりそうだな、と思い結局ここには書いてません。(ただ本解答はこれの様)
binがどれだけかかる処理なのか私はよく知らないけど今回は結構スマートに書けたんじゃないかなって勝手に自分ほめてます。
今日学んだこと
#2進数にするなら
B=bin(A)
この記事が気に入ったらサポートをしてみませんか?