問題概要
問題ページ
-
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()