結果
| 問題 | No.186 中華風 (Easy) |
| コンテスト | |
| ユーザー |
koyumeishi
|
| 提出日時 | 2015-04-20 02:42:14 |
| 言語 | Ruby (3.4.1) |
| 結果 |
AC
|
| 実行時間 | 82 ms / 2,000 ms |
| コード長 | 1,259 bytes |
| 記録 | |
| コンパイル時間 | 68 ms |
| コンパイル使用メモリ | 7,424 KB |
| 実行使用メモリ | 12,288 KB |
| 最終ジャッジ日時 | 2024-07-19 18:24:03 |
| 合計ジャッジ時間 | 2,622 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 23 |
コンパイルメッセージ
Main.rb:31: warning: assigned but unused variable - d Main.rb:31: warning: assigned but unused variable - y Syntax OK
ソースコード
def gcd(a,b)
if(b == 0) then
return a
end
return gcd(b, a%b)
end
def lcm(a,b)
if a<b then
a,b = b,a
end
if(b==1) then
return a
end
return a*(b/gcd(a,b))
end
def extgcd(a,b,x,y)
d = a
if(b!=0) then
d,y,x = extgcd(b, a%b, y,x)
y -= (a/b) * x
else
x = 1
y = 0
end
return d,x,y
end
def mod_inv(a,m)
d,x,y = extgcd(a,m,-1,-1)
return (m+x%m)%m
end
N = 3
x = Array.new(N)
y = Array.new(N)
for i in 0...N do
x[i],y[i] = gets.split.map{|v| v.to_i}
end
MOD = 10**9 + 7
valid = true
for i in 0...N do
for j in 0...N do
if i!=j then
g = gcd(y[i], y[j])
if(x[i]%g != x[j]%g) then
valid = false
end
if g != 1 then
y[i] /= g
y[j] /= g
g_ = gcd(y[i], g)
while g_ != 1 do
y[i] *= g_
g /= g_
g_ = gcd(y[i], g)
end
y[j] *= g
x[i] %= y[i]
x[j] %= y[j]
end
end
end
end
ans = 0
z = Array.new(N)
for i in 0...N do
z[i] = x[i]
for j in 0...i do
z[i] = mod_inv(y[j], y[i]) * (z[i] - z[j])
z[i] = (z[i] + y[i]) % y[i]
end
end
tmp = 1
for i in 0...N do
ans = (ans + z[i] * tmp) #%MOD
tmp = (tmp * y[i]) #%MOD
end
if ans == 0 then
lcm_ = 1
for i in 0...N do
lcm_ = lcm(lcm_, y[i]) #%MOD
end
ans = lcm_
end
if valid == false then
ans = -1
end
puts ans
koyumeishi