ABC039 C - ピアニスト高橋君
備忘録
問題
回答
import sys import os ii = lambda: int(sys.stdin.buffer.readline().rstrip()) il = lambda: list(map(int, sys.stdin.buffer.readline().split())) fl = lambda: list(map(float, sys.stdin.buffer.readline().split())) iln = lambda n: [int(sys.stdin.buffer.readline().rstrip()) for _ in range(n)] iss = lambda: sys.stdin.buffer.readline().decode().rstrip() sl = lambda: list(map(str, sys.stdin.buffer.readline().decode().split())) isn = lambda n: [sys.stdin.buffer.readline().decode().rstrip() for _ in range(n)] MOD = 10 ** 9 + 7 def main(): if os.getenv("LOCAL"): sys.stdin = open("input.txt", "r") S = iss()[0:12] p = "白黒白黒白白黒白黒白黒白".replace("白", 'W').replace("黒", "B") * 2 ret = "ド ド# レ レ# ミ ファ ファ# ソ ソ# ラ ラ# シ"\ .replace("#", "")\ .replace("ド", "Do")\ .replace("レ", "Re")\ .replace("ミ", "Mi")\ .replace("ファ", "Fa")\ .replace("ソ", "So")\ .replace("ラ", "La")\ .replace("シ", "Si")\ .split(" ") print(ret[p.find(S)]) if __name__ == '__main__': main()
考え方
文字列S
はスタート地点から右20個の鍵盤の色が書かれている。
しかし、鍵盤は「白黒白黒白白黒白黒白黒白」の12個の並びを繰り返している。
そのため、鍵盤の並びを十分に(20文字以上)用意し、
文字列S
の12文字と一致する箇所の始点を探索することで、
音階(ド ド# レ レ# ミ ファ ファ# ソ ソ# ラ ラ# シ)の開始地点がわかる。