Submission #41831695


Source Code Expand

# debug = true
debug = false
A_TIME, SHIFT_A_TIME, CAPS_LOCK_TIME = gets.split.map(&:to_i)
INPUT_BYTES = gets.chomp.bytes
SMALL_BYTE, LARGE_BYTE = 'aA'.bytes

dp = Array.new(2) { [] }
dp[0] << 0
dp[1] << CAPS_LOCK_TIME

# CapsLockが偶数回、大文字小文字がこちら側の意味
EVEN_THIS_SIDE = [A_TIME, CAPS_LOCK_TIME + SHIFT_A_TIME + CAPS_LOCK_TIME].min
# CapsLockが偶数回、大文字小文字があちら側の意味
EVEN_OTHER_SIDE = [SHIFT_A_TIME, CAPS_LOCK_TIME + A_TIME + CAPS_LOCK_TIME].min
# CapsLockが奇数回、大文字小文字がどちらでも良いの意味
ODD_ANY_SIDE = [A_TIME + CAPS_LOCK_TIME, SHIFT_A_TIME + CAPS_LOCK_TIME].min
p [EVEN_THIS_SIDE, EVEN_OTHER_SIDE, ODD_ANY_SIDE] if debug
INPUT_BYTES.each_with_index do |byte, i|
  if byte == SMALL_BYTE
    dp[0] << [dp[0][i] + EVEN_THIS_SIDE, dp[1][i] + ODD_ANY_SIDE].min
    dp[1] << [dp[1][i] + EVEN_OTHER_SIDE, dp[0][i] + ODD_ANY_SIDE].min
  else

    dp[0] << [dp[0][i] + EVEN_OTHER_SIDE, dp[1][i] + ODD_ANY_SIDE].min
    dp[1] << [dp[1][i] + EVEN_THIS_SIDE, dp[0][i] + ODD_ANY_SIDE].min
  end
end
p dp if debug
puts [dp[0][-1], dp[1][-1]].min

__END__

dp[0][j+1] = [dp[0][j] + x, dp[1][j] + z + x].min # ここがdp[1][j] + z + yになってしまっている
dp[1][j+1] = [dp[0][j] + z + y, dp[1][j] + y].min # ここもdp[1][j] + xではaではなくAが出力されてしまう。
# とした後に、
dp[0][j+1] = min(dp[0][j+1], dp[1][j+1] + z)
dp[1][j+1] = min(dp[1][j+1], dp[0][j+1] + z)

dp[0][j+1] = dp[0][j] + x
dp[1][j+1] = dp[1][j] + y
# とした後に、
dp[0][j+1] = min(dp[0][j+1], dp[1][j+1] + z)
dp[1][j+1] = min(dp[1][j+1], dp[0][j+1] + z)

Submission Info

Submission Time
Task D - Shift vs. CapsLock
User HalMat
Language Ruby (2.7.1)
Score 400
Code Size 1696 Byte
Status AC
Exec Time 123 ms
Memory 22028 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 3
AC × 31
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_small_00.txt, 01_small_01.txt, 01_small_02.txt, 01_small_03.txt, 01_small_04.txt, 01_small_05.txt, 01_small_06.txt, 01_small_07.txt, 01_small_08.txt, 01_small_09.txt, 02_rnd_00.txt, 02_rnd_01.txt, 02_rnd_02.txt, 02_rnd_03.txt, 02_rnd_04.txt, 02_rnd_05.txt, 02_rnd_06.txt, 02_rnd_07.txt, 02_rnd_08.txt, 02_rnd_09.txt, 03_max_00.txt, 03_max_01.txt, 03_max_02.txt, 03_max_03.txt, 04_border_00.txt, 04_border_01.txt, 04_border_02.txt, 04_border_03.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 59 ms 14024 KiB
00_sample_01.txt AC 57 ms 14104 KiB
00_sample_02.txt AC 60 ms 14136 KiB
01_small_00.txt AC 58 ms 14096 KiB
01_small_01.txt AC 59 ms 14100 KiB
01_small_02.txt AC 57 ms 14244 KiB
01_small_03.txt AC 58 ms 14028 KiB
01_small_04.txt AC 55 ms 14104 KiB
01_small_05.txt AC 56 ms 14164 KiB
01_small_06.txt AC 58 ms 14280 KiB
01_small_07.txt AC 55 ms 14248 KiB
01_small_08.txt AC 56 ms 13984 KiB
01_small_09.txt AC 54 ms 14076 KiB
02_rnd_00.txt AC 120 ms 21868 KiB
02_rnd_01.txt AC 114 ms 21068 KiB
02_rnd_02.txt AC 113 ms 20808 KiB
02_rnd_03.txt AC 103 ms 19596 KiB
02_rnd_04.txt AC 103 ms 19884 KiB
02_rnd_05.txt AC 100 ms 19296 KiB
02_rnd_06.txt AC 107 ms 19972 KiB
02_rnd_07.txt AC 92 ms 18524 KiB
02_rnd_08.txt AC 111 ms 20744 KiB
02_rnd_09.txt AC 92 ms 18316 KiB
03_max_00.txt AC 118 ms 22028 KiB
03_max_01.txt AC 121 ms 21736 KiB
03_max_02.txt AC 121 ms 21940 KiB
03_max_03.txt AC 117 ms 21936 KiB
04_border_00.txt AC 116 ms 21936 KiB
04_border_01.txt AC 122 ms 22020 KiB
04_border_02.txt AC 123 ms 21740 KiB
04_border_03.txt AC 122 ms 21880 KiB