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 |
|
|
|
|
|
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 |