【競技プロ】Atcoder Beginner Contest 186 C問題 「Unlucky7」を解いてみる

この記事は約2分で読めます。

Atcoder Begineers Contest 186 C問題について考えます。

考え方

①10進数と8進数で7を含む数字があれば、カウント用の変数に1ずつ加えていき、入力値からカウント用の変数を引く。

②oct(変数) とすることで8進数に変換することができる。戻り値は文字列なので、7を含むか判定したい場合は文字列としての7がoct(変数)の戻り値に含むかを判定する。10進数はループ変数iを文字列に変えてから7を含むか判定する。

③10進数と8進数で7を含む数字が重なることがあるので、重複を削除したうえで入力値から引く。

提出1 不正解

8進数で7を含むときはaを、10進数で7を含むときはbをインクリメントし、

その時のループ変数 i をリストに保存。

10進数と8進数で重複した数字がリストに保存されるので、

set を使って重複を削除し、その要素数をnから引いてみました。

入力例では2通りともうまくいきましたが、提出時には全然ダメでした。

提出2 正解

提出1を一部修正して再提出したところ、ACとなりました。

for文で、繰り返しをnまでとしていたことが原因でした。

for i in range(n+1): と修正してACできました。

提出1で残っていたコメントアウトも削除しています。

 

参考記事

①方針がわかりやすいです。

[AtCoder] ABC 186 C – Unlucky 7 | ヤマカサの競技プログラミング (yamakasa.net)

②再起関数と剰余の計算を使う場合:python

AtCoder Beginner Contest 186 C問題+D問題 – 電脳ルギア (hatenadiary.jp)

 

コメント