結果

問題 No.3245 Payment with 8-rep Currency
ユーザー tomerun
提出日時 2025-08-22 23:35:13
言語 Crystal
(1.14.0)
結果
WA  
実行時間 -
コード長 854 bytes
コンパイル時間 15,945 ms
コンパイル使用メモリ 311,204 KB
実行使用メモリ 7,720 KB
最終ジャッジ日時 2025-08-22 23:36:20
合計ジャッジ時間 50,313 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample WA * 1
other AC * 25 WA * 5
権限があれば一括ダウンロードができます

ソースコード

diff #

ANS = Array.new(20001) { [-1, -1, -1] }
upper = ANS.size
1.upto(ANS.size // 111) do |c3|
  1.upto((ANS.size - c3 * 111) // 11) do |c2|
    min = {1, c3 - c2 + 1, c2 - c3 + 1}.max
    max = {ANS.size - c3 * 111 - c2 * 11 - 1, c2 + c3 - 1, upper}.min
    min.upto(max) do |c1|
      sum = c1 + c2 * 11 + c3 * 111
      ANS[sum] = [c1, c2, c3]
    end
    if max == upper
      upper = min - 1
    end
  end
end

read_line.to_i.times do
  puts solve().join(" ")
end

def solve
  n = read_line.to_i64
  if n % 8 != 0
    return [-1]
  end
  n //= 8
  if n < ANS.size
    return ANS[n.to_i][0] == -1 ? [-1] : ANS[n.to_i]
  end
  ans = Array.new(4, n // 1234)
  left = n - ans[0] - ans[1] * 11 - ans[2] * 111 - ans[3] * 1111
  ans[2] += left // 111
  left -= left // 111 * 111
  ans[1] += left // 11
  left -= left // 11 * 11
  ans[0] += left
  return ans
end
0