結果
| 問題 |
No.1111 コード進行
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-08-19 18:58:54 |
| 言語 | Kotlin (2.1.0) |
| 結果 |
AC
|
| 実行時間 | 865 ms / 2,000 ms |
| コード長 | 1,762 bytes |
| コンパイル時間 | 13,377 ms |
| コンパイル使用メモリ | 441,760 KB |
| 実行使用メモリ | 86,036 KB |
| 最終ジャッジ日時 | 2024-10-12 05:11:38 |
| 合計ジャッジ時間 | 34,202 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 48 |
ソースコード
import java.io.BufferedReader
import java.io.InputStream
import java.io.InputStreamReader
import java.io.PrintWriter
import java.util.*
fun PrintWriter.solve(sc: FastScanner) {
val n = sc.nextInt()
val m = sc.nextInt()
val k = sc.nextInt()
val mod = 1000000007L
val code = mutableListOf<Triple<Int, Int, Int>>()
val next = Array(300) { mutableListOf<Pair<Int, Int>>() }
for (i in 0 until m) {
val p = sc.nextInt() - 1
val q = sc.nextInt() - 1
val c = sc.nextInt()
code.add(Triple(p, q, c))
next[p].add(q to c)
}
var dp = Array(300) { LongArray(k + 1) { 0 } }
for (i in 0 until 300) {
dp[i][0] = 1
}
for (i in 1 until n) {
val newdp = Array(300) { LongArray(k + 1) { 0 } }
for (j in 0 until 300) {
for (s in 0..k) {
for ((x, c) in next[j]) {
if (s + c > k) continue
newdp[x][s + c] += dp[j][s]
newdp[x][s + c] %= mod
}
}
}
dp = newdp
}
var sum = 0L
for (i in 0 until 300) {
sum += dp[i][k]
}
println(sum % mod)
}
fun main() {
val writer = PrintWriter(System.out, false)
writer.solve(FastScanner(System.`in`))
writer.flush()
}
class FastScanner(s: InputStream) {
private var st = StringTokenizer("")
private val br = BufferedReader(InputStreamReader(s))
fun next(): String {
while (!st.hasMoreTokens()) st = StringTokenizer(br.readLine())
return st.nextToken()
}
fun nextInt() = next().toInt()
fun nextLong() = next().toLong()
fun nextLine() = br.readLine()
fun nextDouble() = next().toDouble()
fun ready() = br.ready()
}