メモ帳

楽しいアウトプットの場所

深さ優先探索(dfs) ABC114

 abc114を解いてみました。

atcoder.jp

 問題文
整数Nが与えられます。1以上N以下の整数のうち、数字 753 がそれぞれ 1 回以上現れ、これら以外の数字は現れないような、ものはいくつあるでしょうか?

典型問題ぽいので、後で見返せるようにまとめておきます。
以下に実装したコードをのせておきます。

 

f:id:nya__nya:20200910154959p:plain

 

※llというのは、long long のマクロ定義です。


s.find(x) == string::npos は文字列Sの中に要素xが存在しない場合にstring::nposが返ってきます。つまり、7,5,3の中で一つでも存在しない数字があるなら、ok = falseにして、答えに加算しないようにします。

また、再帰関数dfsの終了条件は、文字列sをlong long 型にキャストしたものがnよりも大きくなった時になります。

それから、注意しなくてはならないこととして、一番最初にdfs関数に渡される文字列Sは、空文字列であるため、関数の最初の処理を行うことが出来ません。stoll(s)>nでエラーになってしまいます。

ちなみに、stoll(s)というのは、文字列をlong long型に直してくれるものになります。