bridgebook112
@bridgebook112

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

初めてのAtCoderで分からなくなりました

解決したいこと

AtCoderを初めてとりあえずAtCoder Beginner Selectionを解いているのですが解けなくて困っています。解けない問題は「ABC049C 白昼夢」です。言語はPython3を使用しています。

発生している問題・エラー

Runtime Error が発生しています。AtCoderの使い方が分かっていないのか、詳細なエラー内容が取得出来ていません。
以下、AtCoderの問題となります。

問題文

英小文字からなる文字列 S が与えられます。 Tが空文字列である状態から始め、以下の操作を好きな回数繰り返すことで S=T とすることができるか判定してください。

T の末尾に dream dreamer erase eraser のいずれかを追加する。

制約

1≦∣S∣≦10
5

S は英小文字からなる。

該当するソースコード

S=input()
result=[]
def str_find(S):
    global result
    if S.find("dreamer")==0:
        str_find(S[7::])
    if S.find("dream")==0:
        str_find(S[5::])
    if S.find("eraser")==0:
        str_find(S[6::])
    elif S.find("erase")==0:
        str_find(S[5::])
    if len(S)>0:
        result.append("NO")
        return 0
    else:
        result.append("YES")
        return 0
str_find(S)
if "YES" in result:
  print("YES")
else:
  print("NO")

自分で試したこと

他の方が書かれた回答例を使用した所ACでした。また、入力例(S=erasedream,dreameraser,dreamerer)として示されている3パターンに対してはACとなっています。アルゴリズムが悪い、汚いことは分かっていますが今後の為にもなぜ問題が発生しているのかが知りたくて質問させていただきました。

0

1Answer

再帰に上限があります。再帰の上限を超えたのではないでしょうか。再帰をやめるか再帰の上限を変更してみるのはどうですか

1Like

Comments

  1. @bridgebook112

    Questioner

    ご回答ありがとうございます。
    添付していただいた記事を参考にして以下のコードを追加した所、一部がACになり、残りがMLEメモリ制限超過にエラーコードが変わりました。なのでご指摘の通り再帰上限を超えていたと思います。
    import sys
    sys.setrecursionlimit(10**6)

    大変参考になりました。ありがとうございます。今後は再帰上限にならない様なコードを考えます。

Your answer might help someone💌