結果
問題 | No.2197 Same Dish |
ユーザー |
|
提出日時 | 2022-09-19 18:20:29 |
言語 | Kotlin (2.1.0) |
結果 |
AC
|
実行時間 | 793 ms / 2,000 ms |
コード長 | 2,612 bytes |
コンパイル時間 | 13,843 ms |
コンパイル使用メモリ | 457,172 KB |
実行使用メモリ | 89,724 KB |
最終ジャッジ日時 | 2024-06-23 08:45:54 |
合計ジャッジ時間 | 25,973 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 20 |
ソースコード
fun main() {val (n, k) = nextInts()val customers = mutableListOf<Pair<Int, Int>>()for (i in 0 until n) {val (l, r) = nextInts()customers.add(l to r)}customers.sortBy { it.first }val bit = BIT(200005)var compl = ModInt(1)for ((l, r) in customers) {compl *= ModInt(k - bit.sum(l + 1 until 200005))bit.add(r, 1)}val ans = ModInt(k).pow(n.toLong()) - complprintln(ans)}class BIT(private val n: Int) {private val data = LongArray(n) { 0 }fun add(i: Int, x: Long) {var p = i + 1while (p <= n) {data[p - 1] += xp += p and -p}}fun sum(range: IntRange): Long {val l = range.firstval r = range.last + 1return sum(r) - sum(l)}private fun sum(i: Int): Long {var r = ivar s = 0Lwhile(r > 0) {s += data[r - 1]r -= r and -r}return s}}// region ModIntclass ModInt(x: Long) {companion object {//const val MOD = 1000000007Lconst val MOD = 998244353L}constructor(y: Int) : this(y.toLong())val x = (x % MOD + MOD) % MODoperator fun plus(other: ModInt): ModInt {return ModInt(x + other.x)}operator fun minus(other: ModInt): ModInt {return ModInt(x - other.x)}operator fun times(other: ModInt): ModInt {return ModInt(x * other.x)}operator fun div(other: ModInt): ModInt {return this * other.inv()}fun pow(exp: Long): ModInt {if (exp == 0L) return ModInt(1L)var a = pow(exp shr 1)a *= aif (exp and 1L == 0L) return areturn this * a}fun inv(): ModInt {return this.pow(MOD - 2)}override fun equals(other: Any?): Boolean {if (this === other) return trueif (javaClass != other?.javaClass) return falseother as ModIntif (x != other.x) return falsereturn true}override fun hashCode(): Int {return x.hashCode()}override fun toString(): String {return "$x"}}fun Long.toModInt(): ModInt {return ModInt(this)}fun Int.toModInt(): ModInt {return ModInt(this)}fun binomSimple(n: Long, k: Long): ModInt {var numer = ModInt(1)var denom = ModInt(1)for (i in 0 until k) {numer *= ModInt(n - i)denom *= ModInt(k - i)}return numer / denom}// endregionfun nextInts() = readln().split(" ").map { it.toInt() }