結果
問題 | No.1620 Substring Sum |
ユーザー |
![]() |
提出日時 | 2021-07-22 22:09:47 |
言語 | Crystal (1.14.0) |
結果 |
AC
|
実行時間 | 39 ms / 2,000 ms |
コード長 | 3,219 bytes |
コンパイル時間 | 13,516 ms |
コンパイル使用メモリ | 295,836 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-17 18:05:33 |
合計ジャッジ時間 | 15,027 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 20 |
ソースコード
# require "/math/mint"macro static_modint(name, mod)struct {{name}}MOD = {{mod}}i64def self.zeronewenddef self.raw(value : Int64)result = newresult.value = valueresultendmacro [](*nums){% verbatim do %}Array({{@type}}).build({{nums.size}}) do |%buffer|{% for num, i in nums %}%buffer[{{i}}] = {{@type}}.new({{num}}){% end %}{{nums.size}}end{% end %}endgetter value : Int64def initialize@value = 0i64enddef initialize(value)@value = value.to_i64 % MODenddef initialize(m : self)@value = m.valueendprotected def value=(value : Int64)@value = valueenddef ==(m : self)value == m.valueenddef ==(m)value == menddef + : selfselfenddef - : selfself.class.raw(value != 0 ? MOD &- value : 0i64)enddef +(v)self + self.class.new(v)enddef +(m : self)x = value &+ m.valuex &-= MOD if x >= MODself.class.raw(x)enddef -(v)self - self.class.new(v)enddef -(m : self)x = value &- m.valuex &+= MOD if x < 0self.class.raw(x)enddef *(v)self * self.class.new(v)enddef *(m : self)self.class.new(value &* m.value)enddef /(v)self / self.class.new(v)enddef /(m : self)raise DivisionByZeroError.new if m.value == 0a, b, u, v = m.value, 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 >>= 1endresend{% for op in %w[< <= > >=] %}def {{op.id}}(other)raise NotImplementedError.new({{op}})end{% end %}def invself.class.raw(1) // selfenddef succself.class.raw(value != MOD &- 1 ? value &+ 1 : 0i64)enddef predself.class.raw(value != 0 ? value &- 1 : MOD &- 1)enddef absselfenddef abs2self * selfenddef to_i64 : Int64valueenddelegate to_s, to: @valuedelegate inspect, to: @valueend{% to = ("to_" + name.stringify.downcase.gsub(/mint|modint/, "m")).id %}struct Int{% for op in %w[+ - * / //] %}def {{op.id}}(value : {{name}}){{to}} {{op.id}} valueend{% end %}{% for op in %w[< <= > >=] %}def {{op.id}}(m : {{name}})raise NotImplementedError.new({{op}})end{% end %}def {{to}} : {{name}}{{name}}.new(self)endendclass Stringdef {{to}} : {{name}}{{name}}.new(self)endendendstatic_modint(Mint, 1000000007)static_modint(Mint2, 998244353)s = read_lineputs s.chars.each_with_index.sum { |c, i|2.to_m2**i * 11.to_m2**(s.size - 1 - i) * c.to_i}