結果
| 問題 |
No.187 中華風 (Hard)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-09-17 04:09:11 |
| 言語 | Ruby (3.4.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,021 bytes |
| コンパイル時間 | 136 ms |
| コンパイル使用メモリ | 7,680 KB |
| 実行使用メモリ | 19,456 KB |
| 最終ジャッジ日時 | 2024-06-22 04:21:23 |
| 合計ジャッジ時間 | 3,967 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 23 WA * 2 |
コンパイルメッセージ
Main.rb:60: warning: ambiguous first argument; put parentheses or a space even after `-' operator Syntax OK
ソースコード
# frozen_string_literal: true
# return [rem, mod] or [0, 0] (if no solution)
def crt(r, m)
raise ArgumentError if r.size != m.size
n = r.size
r0, m0 = 0, 1
n.times{ |i|
raise ArgumentError if m[i] < 1
r1, m1 = r[i]%m[i], m[i]
if m0 < m1 then
r0, r1 = r1, r0
m0, m1 = m1, m0
end
if m0%m1 == 0 then
return [0, 0] if r0%m1 != r1
next
end
g, im = inv_gcd(m0, m1)
u1 = m1/g
return [0, 0] if (r1-r0)%g != 0
x = (r1-r0)/g*im%u1
r0 += x*m0
m0 *= u1
r0 += m0 if r0 < 0
}
return [r0, m0]
end
# internal method
# return [g, x] s.t. g = gcd(a, b), x*a = g (mod b), 0 <= x < b/g
def inv_gcd(a, b)
a %= b
return [b, 0] if a == 0
s, t = b, a
m0, m1 = 0, 1
while t>0 do
u, s = s.divmod(t)
m0 -= m1*u
s, t = t, s
m0, m1 = m1, m0
end
m0 += b/s if m0 < 0
return [s, m0]
end
gets
r, m = $<.map{ |e| e.split.map &:to_i }.transpose
r, m = crt(r, m)
if r == 0 && m == 0
puts -1
else
puts r % (10**9+7)
end