問題概要
問題ページ
-
C - Secret Number
問題ページへ移動する
問題文
高橋くんは、暗証番号を忘れてしまいました。暗証番号は \(0\) から \(9\) までの数字のみからなる \(4\) 桁の文字列で、\(0\) から始まる場合もあります。
\(0\) から \(9\) までの各数字について、高橋くんは以下のように記憶しています。彼の記憶は長さ \(10\) の文字列 \(S_0S_1 \ldots S_9\) によって表されます。
- \(S_i\) が
o
のとき : 数字 \(i\) は暗証番号に確実に含まれていた。 - \(S_i\) が
x
のとき : 数字 \(i\) は暗証番号に確実に含まれていなかった。 - \(S_i\) が
?
のとき : 数字 \(i\) が暗証番号に含まれているか分からない。
高橋くんが忘れてしまった暗証番号としてあり得るものは何通りありますか?
制約
- \(S\) は
o
,x
,?
のみからなる長さ \(10\) の文字列
問題の考察
ACコード
import sys
import itertools
def solve():
input = sys.stdin.readline
mod = 10 ** 9 + 7
s = str(input().rstrip('\n'))
vd = s.count("o")
cnt = 0
for v in itertools.product(range(0, 10), repeat=4):
ls = [False] * 10
is_ok = True
for i in range(4):
if s[v[i]] == "o":
ls[v[i]] = True
elif s[v[i]] == "x":
is_ok = False
break
if is_ok:
if ls.count(True) == vd:
cnt += 1
print(cnt)
if __name__ == '__main__':
solve()