結果
問題 | No.962 LCPs |
ユーザー | yakamoto |
提出日時 | 2020-01-11 14:25:02 |
言語 | Kotlin (2.1.0) |
結果 |
AC
|
実行時間 | 626 ms / 2,000 ms |
コード長 | 1,625 bytes |
コンパイル時間 | 15,555 ms |
コンパイル使用メモリ | 453,396 KB |
実行使用メモリ | 99,992 KB |
最終ジャッジ日時 | 2024-11-24 22:23:20 |
合計ジャッジ時間 | 47,589 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 288 ms
60,296 KB |
testcase_01 | AC | 304 ms
60,428 KB |
testcase_02 | AC | 325 ms
60,908 KB |
testcase_03 | AC | 328 ms
60,912 KB |
testcase_04 | AC | 316 ms
60,780 KB |
testcase_05 | AC | 303 ms
60,660 KB |
testcase_06 | AC | 323 ms
60,540 KB |
testcase_07 | AC | 315 ms
60,776 KB |
testcase_08 | AC | 319 ms
60,672 KB |
testcase_09 | AC | 312 ms
60,712 KB |
testcase_10 | AC | 309 ms
60,736 KB |
testcase_11 | AC | 306 ms
60,488 KB |
testcase_12 | AC | 307 ms
60,460 KB |
testcase_13 | AC | 293 ms
60,364 KB |
testcase_14 | AC | 298 ms
60,420 KB |
testcase_15 | AC | 296 ms
60,432 KB |
testcase_16 | AC | 298 ms
60,304 KB |
testcase_17 | AC | 570 ms
98,524 KB |
testcase_18 | AC | 505 ms
81,220 KB |
testcase_19 | AC | 501 ms
81,428 KB |
testcase_20 | AC | 506 ms
74,984 KB |
testcase_21 | AC | 512 ms
75,140 KB |
testcase_22 | AC | 482 ms
73,052 KB |
testcase_23 | AC | 501 ms
73,212 KB |
testcase_24 | AC | 475 ms
70,904 KB |
testcase_25 | AC | 473 ms
71,080 KB |
testcase_26 | AC | 471 ms
68,940 KB |
testcase_27 | AC | 508 ms
73,208 KB |
testcase_28 | AC | 495 ms
68,768 KB |
testcase_29 | AC | 494 ms
68,860 KB |
testcase_30 | AC | 516 ms
71,448 KB |
testcase_31 | AC | 542 ms
75,336 KB |
testcase_32 | AC | 470 ms
69,100 KB |
testcase_33 | AC | 549 ms
81,720 KB |
testcase_34 | AC | 490 ms
70,972 KB |
testcase_35 | AC | 489 ms
68,848 KB |
testcase_36 | AC | 481 ms
70,948 KB |
testcase_37 | AC | 505 ms
68,228 KB |
testcase_38 | AC | 515 ms
67,720 KB |
testcase_39 | AC | 519 ms
67,600 KB |
testcase_40 | AC | 499 ms
68,384 KB |
testcase_41 | AC | 515 ms
67,632 KB |
testcase_42 | AC | 508 ms
67,724 KB |
testcase_43 | AC | 517 ms
67,748 KB |
testcase_44 | AC | 513 ms
68,980 KB |
testcase_45 | AC | 510 ms
68,252 KB |
testcase_46 | AC | 505 ms
68,740 KB |
testcase_47 | AC | 421 ms
64,268 KB |
testcase_48 | AC | 423 ms
64,296 KB |
testcase_49 | AC | 410 ms
64,300 KB |
testcase_50 | AC | 432 ms
66,512 KB |
testcase_51 | AC | 389 ms
62,880 KB |
testcase_52 | AC | 381 ms
62,840 KB |
testcase_53 | AC | 428 ms
64,168 KB |
testcase_54 | AC | 428 ms
64,344 KB |
testcase_55 | AC | 411 ms
64,140 KB |
testcase_56 | AC | 437 ms
64,408 KB |
testcase_57 | AC | 458 ms
66,168 KB |
testcase_58 | AC | 454 ms
66,184 KB |
testcase_59 | AC | 447 ms
66,692 KB |
testcase_60 | AC | 453 ms
68,056 KB |
testcase_61 | AC | 460 ms
68,248 KB |
testcase_62 | AC | 463 ms
68,284 KB |
testcase_63 | AC | 597 ms
99,752 KB |
testcase_64 | AC | 387 ms
64,984 KB |
testcase_65 | AC | 626 ms
99,992 KB |
ソースコード
import kotlin.math.min val MOD = 1_000_000_007 fun main() { val (N) = readInts() val S = Array(N){ readLine()!!} val lcps = mutableListOf<Pair<Int, Int>>() for (i in 0 until N - 1) { var l = 0 val mx = min(S[i].length, S[i + 1].length) while(l < mx && S[i][l] == S[i + 1][l]) l++ lcps.add(Pair(i, l)) } lcps.sortBy { it.second } val t = sortedSetOf<Int>() t.add(-1) t.add(N - 1) var ans = 0L S.forEach { ans += it.length } for (lcp in lcps) { val i = lcp.first val l = (i - t.lower(i)!! - 1).toLong() val r = (t.higher(i)!! - i - 1).toLong() var lensum = (l + 1) * (r + 1) * 2 lensum += (l + 1) * r * (r + 1) / 2 lensum += l * (l + 1) / 2 * (r + 1) ans += lensum * lcp.second debug{"l:$l r:$r"} t.add(i) } println(ans) } private val isDebug = try { // なんか本番でエラーでる System.getenv("MY_DEBUG") != null } catch (t: Throwable) { false } private fun readLn() = readLine()!! private fun readInt() = readLn().toInt() private fun readStrings() = readLn().split(" ") private fun readInts() = readStrings().map { it.toInt() }.toIntArray() private fun readLongs() = readStrings().map { it.toLong() }.toLongArray() private inline fun debug(msg: () -> String) { if (isDebug) System.err.println(msg()) } private fun debug(a: LongArray) { debug{a.joinToString(" ")} } private fun debug(a: IntArray) { debug{a.joinToString(" ")} } private fun debug(a: BooleanArray) { debug{a.map{if(it) 1 else 0}.joinToString("")} } private fun debugDim(A: Array<IntArray>) { if (isDebug) { for (a in A) { debug(a) } } }