Submission #57457717


Source Code Expand

N = int(input())
S = input()

d = {"J": 1 << 2, "O": 1 << 1, "I": 1 << 0}
# dp[i][j] := i 列目まで見た時の集合が j の時の組み合わせ
dp = [[0]*(1 << 3) for _ in range(N + 1)]
dp[0][d["J"]] = 1
mod = 10007
for i in range(N):
    # 今日の責任者
    people = d[S[i]]
    for last in range(1 << 3):
        for now in range(1 << 3):
            # 責任者は now に含まれなければいけない
            if (now & people) == 0:
                continue
            # 昨日の参加者の中に最低でも1人は今日参加する人がいなければならない
            if (last & now) == 0:
                continue
            dp[i + 1][now] += dp[i][last]
            dp[i + 1][now] %= mod

# 答えを求める
ans = 0
for j in range(1 << 3):
    ans += dp[N][j]
    ans %= mod
print(ans)

Submission Info

Submission Time
Task D - 部活のスケジュール表 (Schedule)
User ryusuke_h
Language Python (PyPy 3.10-v7.3.12)
Score 100
Code Size 857 Byte
Status AC
Exec Time 60 ms
Memory 81876 KiB

Judge Result

Set Name set01 set02 set03 set04 set05
Score / Max Score 20 / 20 20 / 20 20 / 20 20 / 20 20 / 20
Status
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
Set Name Test Cases
set01 data1
set02 data2
set03 data3
set04 data4
set05 data5
Case Name Status Exec Time Memory
data1 AC 55 ms 76428 KiB
data2 AC 55 ms 76656 KiB
data3 AC 59 ms 81780 KiB
data4 AC 60 ms 81876 KiB
data5 AC 60 ms 81688 KiB