complete 6211.kt 27739.kt 30484.kt
This commit is contained in:
39
storage/zeta/kt/completed/30484.kt
Normal file
39
storage/zeta/kt/completed/30484.kt
Normal file
@@ -0,0 +1,39 @@
|
||||
const val DIVIDER = 1_000_000_007
|
||||
|
||||
data class Counts(
|
||||
var cntBiggers: Long,
|
||||
var cntSmallers: Long
|
||||
)
|
||||
|
||||
fun inversionCount(s: String, n: Long): Int {
|
||||
val alphabetCounts = MutableList(26, { 0 });
|
||||
|
||||
val counts = Counts(0, 0)
|
||||
|
||||
s.forEach { ch ->
|
||||
val index = ch.code - 'a'.code
|
||||
val cntBiggers = alphabetCounts.slice(index + 1 until 26).sum()
|
||||
val cntSmallers = alphabetCounts.slice(0 until index).sum()
|
||||
alphabetCounts[index] += 1
|
||||
|
||||
counts.cntBiggers += cntBiggers
|
||||
counts.cntSmallers += cntSmallers
|
||||
}
|
||||
val (n_mod: Long, np_mod: Long, nm_mod: Long) = if (n % 2 == 0L) {
|
||||
Triple((n / 2) % DIVIDER, (n + 1) % DIVIDER, (n - 1) % DIVIDER)
|
||||
} else {
|
||||
Triple(n % DIVIDER, ((n + 1) / 2) % DIVIDER, ((n - 1) / 2) % DIVIDER)
|
||||
}
|
||||
|
||||
return ((
|
||||
(((((counts.cntBiggers % DIVIDER) * np_mod) % DIVIDER) * n_mod) % DIVIDER) + (((((counts.cntSmallers % DIVIDER) * n_mod) % DIVIDER) * nm_mod) % DIVIDER)
|
||||
) % DIVIDER
|
||||
).toInt()
|
||||
}
|
||||
|
||||
fun main() = with(System.`in`.bufferedReader()) {
|
||||
val s = readln().trim()
|
||||
val n = readln().trim().toLong()
|
||||
|
||||
println(inversionCount(s, n))
|
||||
}
|
||||
Reference in New Issue
Block a user