結果
| 問題 | No.20 砂漠のオアシス | 
| コンテスト | |
| ユーザー |  バカらっく | 
| 提出日時 | 2019-09-01 21:06:10 | 
| 言語 | Kotlin (2.1.0) | 
| 結果 | 
                                WA
                                 
                             | 
| 実行時間 | - | 
| コード長 | 1,957 bytes | 
| コンパイル時間 | 17,275 ms | 
| コンパイル使用メモリ | 451,696 KB | 
| 実行使用メモリ | 301,780 KB | 
| 最終ジャッジ日時 | 2024-11-29 13:35:34 | 
| 合計ジャッジ時間 | 51,069 ms | 
| ジャッジサーバーID (参考情報) | judge1 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 10 WA * 7 TLE * 4 | 
コンパイルメッセージ
Main.kt:3:10: warning: parameter 'args' is never used
fun main(args: Array<String>) {
         ^
            
            ソースコード
import java.util.*
fun main(args: Array<String>) {
    val (n,v,ox, oy) = readLine()!!.split(" ").map { it.toInt() }
    for(i in 1..n) {
        map.add(readLine()!!.split(" ").map { it.toInt() })
        zeroZeroStart.add(MutableList(n, {500000}))
        oasisStart.add(MutableList(n, {500000}))
    }
    buildMap(zeroZeroStart, 0, 0)
    if(ox > 0 && oy > 0) {
        hasOasis = true
        buildMap(oasisStart, ox - 1, oy - 1)
    }
    val ans = if (canGoal(v, ox, oy)) "YES" else "NO"
    println(ans)
}
fun canGoal(vital: Int, oX:Int, oY:Int):Boolean {
    var subVital = vital
    if(zeroZeroStart.last().last() < subVital) {
        return true
    }
    if(!hasOasis) {
        return false
    }
    if(zeroZeroStart[oY][oX] >= subVital) {
        return false
    }
    subVital = (subVital - zeroZeroStart[oY][oX])
    subVital = (subVital * 2)
    return subVital > zeroZeroStart.last().last()
}
var hasOasis = false;
val map = mutableListOf<List<Int>>()
val zeroZeroStart = mutableListOf<MutableList<Int>>()
val oasisStart = mutableListOf<MutableList<Int>>()
class  Task(val x:Int, val y:Int, val step:Int)
fun buildMap(target:MutableList<MutableList<Int>>, startX:Int, startY:Int) {
    val queue = LinkedList<Task>()
    queue.add(Task(startX, startY, 0))
    while (queue.isNotEmpty()) {
        val task = queue.pop()
        if(target[task.y][task.x] <= task.step) {
            continue
        }
        target[task.y][task.x] = task.step
        for(i in Math.max(0, task.y-1)..Math.min(target.lastIndex, task.y+1)) {
            for(j in Math.max(0, task.x-1)..Math.min(target.lastIndex, task.x + 1)) {
                if(i == task.y && j == task.x) {
                    continue
                }
                if(i!=task.y && j!=task.x) {
                    continue
                }
                val nextStep = task.step + map[i][j]
                queue.add(Task(j, i, nextStep))
            }
        }
    }
}
            
            
            
        