ログインしてください。
提出 #57457717
ソースコード 拡げる
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)
提出情報
提出日時 | |
---|---|
問題 | D - 部活のスケジュール表 (Schedule) |
ユーザ | ryusuke_h |
言語 | Python (PyPy 3.10-v7.3.12) |
得点 | 100 |
コード長 | 857 Byte |
結果 | AC |
実行時間 | 60 ms |
メモリ | 81876 KiB |
ジャッジ結果
セット名 | set01 | set02 | set03 | set04 | set05 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
得点 / 配点 | 20 / 20 | 20 / 20 | 20 / 20 | 20 / 20 | 20 / 20 | ||||||||||
結果 |
|
|
|
|
|
セット名 | テストケース |
---|---|
set01 | data1 |
set02 | data2 |
set03 | data3 |
set04 | data4 |
set05 | data5 |
ケース名 | 結果 | 実行時間 | メモリ |
---|---|---|---|
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 |