Edit

【pythonでABC201を解説】C - Secret Number

問題概要

問題ページ

C - Secret Number
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()

-Edit