結果
問題 | No.1340 おーじ君をさがせ |
ユーザー | CuriousFairy315 |
提出日時 | 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 |
ソースコード
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() }