結果

問題 No.873 バイナリ、ヤバいなり!w
コンテスト
ユーザー バカらっく
提出日時 2019-09-05 02:26:30
言語 Kotlin
(2.3.20)
コンパイル:
kotlinc _filename_ -include-runtime -d main.jar
実行:
kotlin main.jar
結果
WA  
実行時間 -
コード長 1,692 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 8,502 ms
コンパイル使用メモリ 473,160 KB
実行使用メモリ 130,440 KB
最終ジャッジ日時 2026-03-10 05:52:40
合計ジャッジ時間 33,650 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge1_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 22 WA * 9 TLE * 5
権限があれば一括ダウンロードができます
コンパイルメッセージ
Main.kt:9:9: warning: unnecessary non-null assertion (!!) on a non-null receiver of type 'List<Int>'.
    list!!.forEach {
        ^^

ソースコード

diff #
raw source code

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) })
    var prevChar = '0'
    val ans = StringBuilder()
    list!!.forEach {
        val ret = getWord(prevChar == '0', it)
        ans.append(ret)
        prevChar = ret.last()
    }
    println(ans.toString())
}

fun com(a:Int, b:Int):Int {
    if(a % 2 == 1) {
        if(b % 2 == 1) {
            return a.compareTo(b)
        } else {
           return -1
        }
    } else {
        if(b % 2 == 0) {
            return b.compareTo(a)
        } else {
            return 1
        }
    }
}

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("")
    }
}
0