結果

問題 No.1766 Tatsujin Remix
ユーザー maguroflymagurofly
提出日時 2021-11-26 23:19:44
言語 Ruby
(3.3.0)
結果
WA  
実行時間 -
コード長 1,290 bytes
コンパイル時間 38 ms
コンパイル使用メモリ 7,552 KB
実行使用メモリ 13,568 KB
最終ジャッジ日時 2024-06-29 18:34:03
合計ジャッジ時間 18,898 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 86 ms
12,288 KB
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 WA -
testcase_23 WA -
testcase_24 AC 1,196 ms
13,312 KB
testcase_25 WA -
権限があれば一括ダウンロードができます
コンパイルメッセージ
Syntax OK

ソースコード

diff #

N = gets.to_i
S = Array.new(N) { gets.chomp }.join
MOD = 998244353
M = 16 * N

# S = gets.chomp
# M = N

# . d k
dp = [0, 0, 0]
case S[-1]
when ?d
  dp[1] = 1
when ?k
  dp[2] = 1
when ?.
  dp = [1, 1, 1]
end

(0 ... M - 1).reverse_each do |i|
  is_odd = i.even?
  case S[i]
  when ?d
    if is_odd
      dp = [0, dp.sum % MOD, 0]
    else
      dp = [0, (dp[1] + dp[2]) % MOD, 0]
    end
  when ?k
    if is_odd
      dp = [0, 0, dp.sum % MOD]
    else
      dp = [0, (dp[1] + dp[2]) % MOD, 0]
    end
  when ?.
    if is_odd
      dp = [dp[0], (dp[0] + dp[2]) % MOD, (dp[0] + dp[1]) % MOD]
    else
      dp = [dp.sum % MOD, dp[2], dp[1]]
    end
  end
  
#   STDERR.puts "#{i} #{S[i]}: #{dp * ", "}"
end

puts dp.sum % MOD

=begin
# アレンジとは?

- . を . または d または k に変えたもの
- .d → .d|kd, .k → .k|dk でなければならない
- 奇数番目の . の横が d なら . を k 、 k なら . を d に変えないといけない

## アレンジの例

- ...(最初が奇数番目)のアレンジは .d., .k., ...


..d → ..d, d.d, k.d, dkd
...d → ..kd, d.kd, k.kd, kdkd

1212121212121212
ddddkkddd.d.kkdd → ddddkkddd[.k]d[.k]kkdd

1212121212121212          2    2        3      2
k..kk.k.kk..k..k → kkdkk[.d]k[.d]kk([dk].|kd)k[.k]dk


=end
0