結果
問題 |
No.3245 Payment with 8-rep Currency
|
ユーザー |
![]() |
提出日時 | 2025-08-22 23:36:39 |
言語 | Crystal (1.14.0) |
結果 |
AC
|
実行時間 | 1,121 ms / 2,000 ms |
コード長 | 857 bytes |
コンパイル時間 | 12,404 ms |
コンパイル使用メモリ | 310,992 KB |
実行使用メモリ | 7,808 KB |
最終ジャッジ日時 | 2025-08-22 23:37:53 |
合計ジャッジ時間 | 49,823 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 30 |
ソースコード
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, 0] 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