結果
| 問題 |
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()
}
CuriousFairy315