結果
問題 |
No.1330 Multiply or Divide
|
ユーザー |
![]() |
提出日時 | 2021-01-09 15:50:26 |
言語 | Crystal (1.14.0) |
結果 |
AC
|
実行時間 | 841 ms / 2,000 ms |
コード長 | 648 bytes |
コンパイル時間 | 14,735 ms |
コンパイル使用メモリ | 311,592 KB |
実行使用メモリ | 35,952 KB |
最終ジャッジ日時 | 2025-06-20 01:25:11 |
合計ジャッジ時間 | 24,861 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 51 |
ソースコード
lib C fun strtoll(s : UInt8*, p : UInt8**, b : Int32) : Int64 end class String def to_i64 C.strtoll(self, nil, 10) end end n, m, k = read_line.split.map(&.to_i64) a = read_line.split.map(&.to_i64) b, cnt = a.map { |i| c = 1 while i % k == 0 i //= k c += 1 end [i, c] }.transpose if a.max > m puts 1 exit end if b.max == 1 puts -1 exit end goal = m // a.max + 1 MAX_X = 500 dp = [0] * MAX_X dp[0] = 1 (0...MAX_X).each do |x| (0...n).each do |i| if dp[x] < goal && x + cnt[i] < MAX_X dp[x + cnt[i]] = {dp[x + cnt[i]], dp[x] * b[i]}.max end end end puts dp.index { |i| i >= goal }.not_nil! + 1