Alchemy [Facebook Hacer Cup Qualication Round, Problem B]
読んだことはないが、鋼の錬金術師のパロディらしい。
問題文:
Problem B: Alchemy | Facebook Hacker Cup - 2020 - Qualification Round
概要
奇数個の要素を持つbit列が存在する。その中から連続する3つの要素をのぞき、選んだ3つの要素の中で多い方のbit を持つ要素を除いた箇所に挿入するという操作を繰り返す。
ただし、選ぶ3つの要素が全て同じbitであることは許されない。
その時、要素が1つになるまで操作を続けることは可能かを判定せよ。
考察
ゲーム問題なので、後ろから考えてみるが後ろから考えるのは無限にパターンが増えるので厳しい。
実験をして考えると、0,1の数の差が1であることと1つにできるかが同値っぽいので、それを証明する。
証明
必要条件
操作が行えなくなるのは、どの連続する3つの要素を選んでもそれが全て同じbitになる時である。
しかし、0,1の数の差は操作によって不変であることから、0,1の数の差が1の場合はずっと1であるので要素数が1になるまで必ず操作を行うことができる。
実装
t = int(input()) for case in range(t): n = int(input()) s = input() numA = s.count("A") numB = s.count("B") if abs(numA - numB) != 1: ans = "N" else: ans = "Y" case_str = "Case #" + str(case + 1) + ":" + ans print(case_str)