trail

そのままです

D - Logical Expressionとコードのメモ

おそらくテスターの方が書いていたコードがパット見で困ったので書き残し。

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も同様に。