結果
問題 | No.1181 Product Sum for All Subsets |
ユーザー |
![]() |
提出日時 | 2020-10-31 12:32:37 |
言語 | Crystal (1.14.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,455 bytes |
コンパイル時間 | 11,499 ms |
コンパイル使用メモリ | 297,640 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-06-30 21:35:58 |
合計ジャッジ時間 | 12,722 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 |
ソースコード
lib Cfun strtoll(s : UInt8*, p : UInt8**, b : Int32) : Int64endclass Stringdef to_i64C.strtoll(self, nil, 10)endendstruct ModInt@@MOD = 1_000_000_007i64def self.mod@@MODenddef self.zeroModInt.new(0)enddef initialize(n)@n = n.to_i64 % @@MODendgetter n : Int64def + : selfselfenddef - : selfModInt.new(n != 0 ? @@MOD - @n : 0)enddef +(m)ModInt.new(@n + m.to_i64 % @@MOD)enddef -(m)ModInt.new(@n - m.to_i64 % @@MOD)enddef *(m)ModInt.new(@n * m.to_i64 % @@MOD)enddef /(m)raise DivisionByZeroError.new if m == 0a, b, u, v = m.to_i64, @@MOD, 1i64, 0i64while b != 0t = a // ba -= t * ba, b = b, au -= t * vu, v = v, uendModInt.new(@n * u)enddef //(m)self / menddef **(m : Int)t, res = self, ModInt.new(1)while m > 0res *= t if m.odd?t *= tm >>= 1endresenddef ==(m)@n == m.to_i64enddef !=(m)@n != m.to_i64enddef succself + 1enddef predself - 1enddef to_i64 : Int64@nenddelegate to_s, to: @ndelegate inspect, to: @nendstruct Intdef to_mint : ModIntModInt.new(self)endendclass Stringdef to_mint : ModIntModInt.new(self)endendn, k = read_line.split.map(&.to_i64)k = k.to_mintputs (k*(k + 3)/2)**n - (k*(k + 1)/2)**n