結果

問題 No.1340 おーじ君をさがせ
ユーザー CuriousFairy315CuriousFairy315
提出日時 2021-01-15 22:53:40
言語 Kotlin
(2.1.0)
結果
AC  
実行時間 1,406 ms / 2,000 ms
コード長 1,786 bytes
コンパイル時間 14,115 ms
コンパイル使用メモリ 455,496 KB
実行使用メモリ 82,820 KB
最終ジャッジ日時 2024-11-27 23:20:37
合計ジャッジ時間 55,072 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 59
権限があれば一括ダウンロードができます

ソースコード

diff #

package yukicoder

import kotlin.math.*
import java.util.*

class Main(private val args : Array<String>) : Runnable {
    override fun run() {
        solve(args)
    }
    private fun solve(@Suppress("UNUSED_PARAMETER") args: Array<String>) {
        Scanner(System.`in`).use { sc ->
            val N = sc.nextInt()
            val M = sc.nextInt()
            val T = sc.nextLong()
            val doubling = MutableList(60){MutableList(N){BooleanArray(N)} }
            repeat(M) {
                val a = sc.nextInt()
                val b = sc.nextInt()
                doubling[0][a][b] = true
            }
            for (i in 1 until 60) {
                for (l in 0 until N) {
                    for (r in 0 until N) {
                        for (m in 0 until N) {
                            if (doubling[i - 1][l][m] and doubling[i - 1][m][r]) doubling[i][l][r] = true
                        }
                    }
                }
            }
            var ans = BooleanArray(N)
            ans[0] = true
            for (i in 0 until 60) {
                if ((T shr i and 1) == 0L) continue
                val swap = BooleanArray(N)
                for (l in 0 until N) {
                    for (r in 0 until N) {
                        if (doubling[i][l][r]) swap[r] = swap[r] or ans[l]
                    }
                }
                ans = swap
            }
            println(ans.filter{it}.count())
        }
    }
}

/** 確保するメモリの大きさ(単位: MB)  */
private const val MEMORY: Long = 64

fun main(args: Array<String>) {
    Thread.setDefaultUncaughtExceptionHandler { _: Thread?, e: Throwable ->
        e.printStackTrace()
        System.exit(1)
    }
    Thread(null, Main(args = args), "", MEMORY * 1048576L).start()
}
0