おそらくテスターの方が書いていたコードがパット見で困ったので書き残し。
N = int(input()) w0, w1 = 1, 1 for i in range(N): S = input() if S == 'AND': w0, w1 = w0 * 2 + w1, w1 else: w0, w1 = w0, w0 + w1 * 2 print(w1)
そもそも、これを読んだときにまず自分がまずかったのはorとandの解釈を忘れていたこと。
orはいずれかがtrueならtrue、andはどっちもtrueでtrueとなる。
だから単純に条件を満たす通り数をw1、満たさないのをw0とおくと、
andのときは両方trueのみ条件を満たすので、これまでの累積がFならもう片方がどちらでも条件を満たす(2倍)
これまでの累積がTならFの場合のみ条件を満たさないとなる。
一方で、満たす条件はこれまでがTかつもう片方もTのみとなる。
orも同様に。