Edit

【pythonでABC211を解説】C - chokudai

問題概要

問題ページ

C - chokudai
C - chokudai

問題ページへ移動する

問題文

文字列 \(S\) が与えられます。
このうち \(8\) 文字を選び下線を引き、下線を引いた文字が左から順に c , h , o , k , u , d , a , i となるようにする方法は何通りありますか?
ただし答えは非常に大きくなる可能性があるので、\((10^9 + 7)\) で割った余りを出力してください。

制約

  • \(8 \leq |S| \leq 10^5\)
  • \(S\) は英小文字からなる

問題の考察

ACコード

import sys
import collections


def solve():
    input = sys.stdin.readline
    mod = 10 ** 9 + 7
    s = str(input().rstrip('\n'))
    d = collections.defaultdict(int)
    for v in s:
        if v == "c":
            d[v] += 1
        elif v == "h":
            d[v] += d["c"]
        elif v == "o":
            d[v] += d["h"]
        elif v == "k":
            d[v] += d["o"]
        elif v == "u":
            d[v] += d["k"]
        elif v == "d":
            d[v] += d["u"]
        elif v == "a":
            d[v] += d["d"]
        elif v == "i":
            d[v] += d["a"]
    print(d["i"] % mod)


if __name__ == '__main__':
    solve()

-Edit