結果
| 問題 |
No.186 中華風 (Easy)
|
| コンテスト | |
| ユーザー |
timi
|
| 提出日時 | 2022-12-31 22:01:37 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 40 ms / 2,000 ms |
| コード長 | 959 bytes |
| コンパイル時間 | 248 ms |
| コンパイル使用メモリ | 82,340 KB |
| 実行使用メモリ | 53,824 KB |
| 最終ジャッジ日時 | 2024-11-26 21:42:42 |
| 合計ジャッジ時間 | 1,929 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 23 |
ソースコード
a,b=map(int, input().split())
c,d=map(int, input().split())
e,f=map(int, input().split())
def inv_gcd(a, b):
a = a%b
if a == 0:
return b,0
s = b
t = a
m0 = 0
m1 = 1
while t:
u = s//t
s -= t*u
m0 -= m1*u
s,t = t,s
m0,m1 = m1,m0
if m0 < 0:
m0 += b//s
return s,m0
def chinese_remainder(rrr, mmm):
n = len(rrr)
r0 = 0
m0 = 1
for i in range(n):
r1 = rrr[i]%mmm[i]
m1 = mmm[i]
if m0 < m1:
r0,r1 = r1,r0
m0,m1 = m1,m0
if m0%m1 == 0:
if r0%m1 != r1:
return 0,0
continue
g,im = inv_gcd(m0,m1)
u1 = m1//g
if (r1-r0)%g:
return 0, 0
x = (r1-r0)//g%u1*im%u1
r0 += x*m0
m0 *= u1
if r0 < 0:
r0 += m0
return r0,m0
r,m=chinese_remainder([a,c,e],[b,d,f])
# r : 2*X+2*Yで割ってX+a余り、P+Qで割ってP+b余る 最小の数
# m : 2*X+2*YとP+Qの最小公倍数
if m==0:
print(-1)
else:
if r==0:
r+=m
print(r)
timi