結果
| 問題 |
No.1630 Sorting Integers (Greater than K)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-07-30 22:04:50 |
| 言語 | Kotlin (2.1.0) |
| 結果 |
AC
|
| 実行時間 | 599 ms / 2,000 ms |
| コード長 | 1,860 bytes |
| コンパイル時間 | 14,738 ms |
| コンパイル使用メモリ | 445,048 KB |
| 実行使用メモリ | 76,704 KB |
| 最終ジャッジ日時 | 2024-09-16 00:19:51 |
| 合計ジャッジ時間 | 26,655 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 22 |
ソースコード
import java.io.PrintWriter
import java.util.*
import kotlin.math.*
fun PrintWriter.solve() {
val n = nextInt()
val k = next()
val c = Array(9) { nextInt() }
if (k.length > n) {
println(-1)
return
}
val s = "0".repeat(n - k.length) + k
var last = -1
val deque = ArrayDeque<Char>()
fun output() {
while (deque.isNotEmpty()) {
print(deque.pollFirst())
}
for (j in 0 until 9) {
print(('1' + j).toString().repeat(c[j]))
}
println()
return
}
for (i in 0 until n) {
last = i
if (s[i] == '0') {
output()
return
} else if (c[s[i] - '1'] > 0) {
c[s[i] - '1']--
deque.addLast(s[i])
last++
} else {
for (j in s[i] - '1' + 1 until 9) {
if (c[j] > 0) {
deque.add('1' + j)
c[j]--
output()
return
}
}
break
}
}
for (i in last - 1 downTo 0) {
val d = deque.pollLast()
c[d - '1']++
for (j in d - '1' + 1 until 9) {
if (c[j] > 0) {
deque.add('1' + j)
c[j]--
output()
return
}
}
}
println(-1)
}
fun main() {
val writer = PrintWriter(System.out, false)
writer.solve()
writer.flush()
}
// region Scanner
private var st = StringTokenizer("")
private val br = System.`in`.bufferedReader()
fun next(): String {
while (!st.hasMoreTokens()) st = StringTokenizer(br.readLine())
return st.nextToken()
}
fun nextInt() = next().toInt()
fun nextLong() = next().toLong()
fun nextLine() = br.readLine()
fun nextDouble() = next().toDouble()
// endregion