結果
問題 | No.1081 和の和 |
ユーザー |
|
提出日時 | 2020-06-19 21:24:09 |
言語 | Kotlin (2.1.0) |
結果 |
AC
|
実行時間 | 296 ms / 2,000 ms |
コード長 | 2,923 bytes |
コンパイル時間 | 13,997 ms |
コンパイル使用メモリ | 457,744 KB |
実行使用メモリ | 56,924 KB |
最終ジャッジ日時 | 2024-07-03 13:40:57 |
合計ジャッジ時間 | 17,796 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 8 |
コンパイルメッセージ
Main.kt:111:10: warning: parameter 'args' is never used fun main(args: Array<String>) { ^
ソースコード
import java.io.BufferedReaderimport java.io.InputStreamimport java.io.InputStreamReaderimport java.io.PrintWriterimport java.lang.IllegalArgumentExceptionimport java.lang.StringBuilderimport java.util.*// ModInt// regionclass ModInt(x: Long) {companion object {const val MOD = 1000000007L//const val MOD = 998244353L}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"}}val fac = mutableListOf<ModInt>()val invfac = mutableListOf<ModInt>()fun fact(n: Long, b: Boolean): ModInt {if (fac.count() == 0) {fac.add(ModInt(1))invfac.add(ModInt(1))}while (fac.count() <= n) {fac.add(fac.last() * ModInt(fac.count().toLong()))invfac.add(fac.last().inv())}return if (b) {fac[n.toInt()]} else {invfac[n.toInt()]}}fun comb(n: Long, k: Long): ModInt {return fact(n, true) * fact(k, false) * fact(n - k, false)}fun comb2(n: Long, k: Long): ModInt {var ans = ModInt(1)for (i in 0 until k) {ans = ans * ModInt(n - i) / ModInt(k - i)}return ans}// endregionfun PrintWriter.solve(sc: FastScanner) {val n = sc.nextInt()val a = Array(n) { sc.nextInt() }var ans = ModInt(0)for (i in 0 until n) {ans += ModInt(a[i].toLong()) * comb(n - 1L, i.toLong())}println(ans)}fun main(args: Array<String>) {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()}