Submission #3402391


Source Code Expand

class Combination
  def initialize(n, mod)
    @mod = mod
    create_fact_mod(n)
    create_seq_inv_mod(n)
    create_fact_inv_mod(n)
  end

  def create_fact_mod(num_max)
    @fmod = Array.new(num_max + 1)
    @fmod[0] = 1
    @fmod[1] = 1
    (2..num_max).each do |i|
      @fmod[i] = (@fmod[i - 1] * i) % @mod
    end
  end

  def create_seq_inv_mod(num_max)
    @simod = Array.new(num_max + 1)
    @simod[0] = 1
    @simod[1] = 1
    (2..num_max).each do |i|
      @simod[i] = (@mod - @mod / i) * @simod[@mod % i] % @mod
    end
  end

  def create_fact_inv_mod(num_max)
    @fimod = Array.new(num_max + 1)
    @fimod[0] = 1
    @fimod[1] = 1
    (2..num_max).each do |i|
      @fimod[i] = (@fimod[i - 1] * @simod[i]) % @mod
    end
  end

  def comb_mod(n, k)
    @fmod[n] * @fimod[n - k] * @fimod[k] % @mod
  end

  def perm_mod(n, k)
    @fmod[n] * @fimod[n - k] % @mod
  end
end

H, W, A, B = gets.split.map(&:to_i)

M = [H - A, W - B].min
mod = 10**9 + 7
ans = 0

comb = Combination.new(H + W, mod)

M.times  do |i|
  h1 = H - A - i - 1
  w1 = B + i
  ans += comb.comb_mod(h1 + w1, h1) * comb.comb_mod(H - h1 + W - w1 - 2, H - h1 - 1)
  ans %= mod
end
puts ans

Submission Info

Submission Time
Task D - Iroha and a Grid
User mosmos21
Language Ruby (2.3.3)
Score 400
Code Size 1227 Byte
Status AC
Exec Time 190 ms
Memory 6524 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 4
AC × 26
Set Name Test Cases
Sample subtask0_01.txt, subtask0_02.txt, subtask0_03.txt, subtask0_04.txt
All subtask0_01.txt, subtask0_02.txt, subtask0_03.txt, subtask0_04.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_max.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_max.txt
Case Name Status Exec Time Memory
subtask0_01.txt AC 7 ms 1788 KB
subtask0_02.txt AC 7 ms 1788 KB
subtask0_03.txt AC 95 ms 6524 KB
subtask0_04.txt AC 145 ms 6524 KB
subtask1_01.txt AC 7 ms 1788 KB
subtask1_02.txt AC 7 ms 1788 KB
subtask1_03.txt AC 7 ms 1788 KB
subtask1_04.txt AC 7 ms 1788 KB
subtask1_05.txt AC 7 ms 1788 KB
subtask1_06.txt AC 7 ms 1788 KB
subtask1_07.txt AC 7 ms 1788 KB
subtask1_08.txt AC 7 ms 1788 KB
subtask1_09.txt AC 7 ms 1788 KB
subtask1_10.txt AC 7 ms 1788 KB
subtask1_max.txt AC 7 ms 1788 KB
subtask2_01.txt AC 18 ms 2172 KB
subtask2_02.txt AC 16 ms 2172 KB
subtask2_03.txt AC 12 ms 2044 KB
subtask2_04.txt AC 21 ms 2172 KB
subtask2_05.txt AC 15 ms 2172 KB
subtask2_06.txt AC 190 ms 6524 KB
subtask2_07.txt AC 105 ms 6524 KB
subtask2_08.txt AC 156 ms 6396 KB
subtask2_09.txt AC 137 ms 6396 KB
subtask2_10.txt AC 140 ms 6524 KB
subtask2_max.txt AC 27 ms 2300 KB