結果
| 問題 |
No.873 バイナリ、ヤバいなり!w
|
| コンテスト | |
| ユーザー |
バカらっく
|
| 提出日時 | 2019-09-05 02:36:49 |
| 言語 | Kotlin (2.1.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,909 bytes |
| コンパイル時間 | 15,406 ms |
| コンパイル使用メモリ | 458,876 KB |
| 実行使用メモリ | 138,692 KB |
| 最終ジャッジ日時 | 2024-06-24 06:39:19 |
| 合計ジャッジ時間 | 24,465 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 3 |
| other | WA * 1 TLE * 2 -- * 33 |
コンパイルメッセージ
Main.kt:4:10: warning: parameter 'args' is never used
fun main(args: Array<String>) {
^
Main.kt:48:9: warning: variable 'list' is never used
val list = mutableListOf<Array<Int>>()
^
Main.kt:56:21: warning: name shadowed: list
val list = mutableListOf(idx)
^
ソースコード
import java.lang.Math.sqrt
import java.lang.StringBuilder
fun main(args: Array<String>) {
var n = readLine()!!.toInt()
var list = getList(n)!!.sortedWith(Comparator { a, b -> com(a, b, true) })
var prevChar = '0'
val ans = StringBuilder()
while (list.isNotEmpty()) {
val word = getWord(prevChar == '0', list[0])
ans.append(word)
prevChar = word.last()
list = list.drop(1).sortedWith(Comparator { a, b -> com(a, b, prevChar == '0') })
}
println(ans.toString())
}
fun com(a:Int, b:Int, prevZero: Boolean):Int {
var mul = -1
if(prevZero) {
mul = 1
}
if(a % 2 == 1) {
if(b % 2 == 1) {
return a.compareTo(b) * mul
} else {
return -1 * mul
}
} else {
if(b % 2 == 0) {
return b.compareTo(a) * mul
} else {
return 1 * mul
}
}
}
val map = mutableMapOf<Int, Array<Int>>()
fun getList(num:Int):Array<Int>? {
if(num == 1) {
return arrayOf(1)
}
if(num == 0) {
return arrayOf()
}
map[num]?.let { return it }
val lastIndex = sqrt(num.toDouble()).toInt()
val list = mutableListOf<Array<Int>>()
var len = num
var minList = Array<Int>(0, {0})
(1..lastIndex).reversed().forEach {
val ret = getList(num - it * it)
val idx = it
ret?.let {
if(it.size < len) {
val list = mutableListOf(idx)
list.addAll(it)
len = it.size
minList = list.toTypedArray()
}
}
}
if(minList.isEmpty()) {
return null
}
map[num] = minList
return minList
}
fun getWord(prevZero:Boolean, num:Int):String {
if(prevZero) {
return (1..num).map { (it - 1) % 2 }.joinToString("")
} else {
return (1..num).map { it % 2 }.joinToString("")
}
}
バカらっく