結果
問題 | No.1518 Simple Combinatorics |
ユーザー |
![]() |
提出日時 | 2021-05-28 21:02:28 |
言語 | Crystal (1.14.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 2,291 bytes |
コンパイル時間 | 14,575 ms |
コンパイル使用メモリ | 295,608 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-11-07 08:34:04 |
合計ジャッジ時間 | 15,361 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
ソースコード
# require "math/Mint"macro static_modint(name, mod)struct {{name}}MOD = {{mod}}.to_i64def self.zeronewenddef self.raw(value : Int64)result = newresult.value = valueresultend@value : Int64def initialize@value = 0i64enddef initialize(value)@value = value.to_i64 % MODenddef initialize(m : self)@value = m.valueendprotected def value=(value : Int64)@value = valueendgetter value : Int64def + : selfselfenddef - : selfself.class.raw(value != 0 ? MOD &- value : 0i64)enddef +(v)self + v.to_menddef +(m : self)x = value &+ m.valuex &-= MOD if x >= MODself.class.raw(x)enddef -(v)self - v.to_menddef -(m : self)x = value &- m.valuex &+= MOD if x < 0self.class.raw(x)enddef *(v)self * v.to_menddef *(m : self)self.class.new(value &* m.value)enddef /(v)self / v.to_menddef /(m : self)raise DivisionByZeroError.new if m.value == 0a, b, u, v = m.to_i64, MOD, 1i64, 0i64while b != 0t = a // ba &-= t &* ba, b = b, au &-= t &* vu, v = v, uendself.class.new(value &* u)enddef //(v)self / venddef **(exponent : Int)t, res = self, self.class.raw(1i64)while exponent > 0res *= t if exponent & 1 == 1t *= texponent >>= 1endresenddef ==(v)value == venddef ==(m : self)value == m.valueenddef succself.class.raw(value != MOD &- 1 ? value &+ 1 : 0i64)enddef predself.class.raw(value != 0 ? value &- 1 : MOD &- 1)enddef absselfenddef to_i64 : Int64valueenddelegate to_s, to: @valuedelegate inspect, to: @valueendstruct Intdef to_m : {{name}}{{name}}.new(self)endendclass Stringdef to_m : {{name}}{{name}}.new(self)endendendstatic_modint(Mint, 10**9 + 7)n, k = read_line.split.map(&.to_i)n = n.to_mputs n**(k + 1) - n * (n - 1)**k