結果

問題 No.3429 Palindromic Path (Hard)
コンテスト
ユーザー tomerun
提出日時 2026-01-11 14:37:24
言語 Crystal
(1.18.2)
結果
AC  
実行時間 105 ms / 2,000 ms
コード長 937 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 13,875 ms
コンパイル使用メモリ 338,384 KB
実行使用メモリ 7,848 KB
最終ジャッジ日時 2026-01-11 14:37:39
合計ジャッジ時間 14,675 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 7
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

MOD = 998244353i64
n = read_line.to_i
cs = Array.new(n) { read_line.chars }
fs = Array.new(n) do |i|
  Array.new(i + 1) do |j|
    cs[i - j][j]
  end
end
ss = Array.new(n) do |i|
  Array.new(i + 1) do |j|
    cs[n - 1 - (i - j)][n - 1 - j]
  end.reverse
end
if fs[0][0] != ss[0][0]
  puts 0
  exit
end
dp = Array.new(1) { [1i64] }
1.upto(n - 1) do |i|
  dp2 = Array.new(i + 1) { Array.new(i + 1, 0i64) }
  i.times do |j|
    i.times do |k|
      if fs[i][j] == ss[i][k]
        dp2[j][k] += dp[j][k]
        dp2[j][k] %= MOD
      end
      if fs[i][j + 1] == ss[i][k]
        dp2[j + 1][k] += dp[j][k]
        dp2[j + 1][k] %= MOD
      end
      if fs[i][j] == ss[i][k + 1]
        dp2[j][k + 1] += dp[j][k]
        dp2[j][k + 1] %= MOD
      end
      if fs[i][j + 1] == ss[i][k + 1]
        dp2[j + 1][k + 1] += dp[j][k]
        dp2[j + 1][k + 1] %= MOD
      end
    end
  end
  dp = dp2
end
puts n.times.sum { |i| dp[i][i] } % MOD
0