結果
問題 | No.186 中華風 (Easy) |
ユーザー | こどこど |
提出日時 | 2020-09-17 00:37:54 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,394 bytes |
コンパイル時間 | 161 ms |
コンパイル使用メモリ | 82,316 KB |
実行使用メモリ | 54,528 KB |
最終ジャッジ日時 | 2024-06-22 03:49:39 |
合計ジャッジ時間 | 1,921 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 34 ms
53,436 KB |
testcase_01 | WA | - |
testcase_02 | WA | - |
testcase_03 | WA | - |
testcase_04 | AC | 34 ms
52,688 KB |
testcase_05 | WA | - |
testcase_06 | WA | - |
testcase_07 | WA | - |
testcase_08 | WA | - |
testcase_09 | WA | - |
testcase_10 | AC | 39 ms
53,576 KB |
testcase_11 | WA | - |
testcase_12 | WA | - |
testcase_13 | AC | 33 ms
52,816 KB |
testcase_14 | WA | - |
testcase_15 | WA | - |
testcase_16 | WA | - |
testcase_17 | WA | - |
testcase_18 | WA | - |
testcase_19 | AC | 35 ms
53,128 KB |
testcase_20 | AC | 34 ms
52,376 KB |
testcase_21 | AC | 35 ms
52,884 KB |
testcase_22 | AC | 34 ms
53,256 KB |
ソースコード
# 拡張ユークリッドの互除法でgcd(a, b) と ax ≡ gcd(a, b) (mod b)となるxを求める # x は a/gcd(a, b) の b/gcd(a,b) を法とした逆元ともいえる。 def gcd_inverse(a, b): a = a % b if a == 0: return b, 0 s, xs = b, 0 t, xt = a, 1 while t: n = s // t s, t = t, s % t xs, xt = xt, xs - n * xt if xs < 0: xs += a // s return s, xs def crt(b, m): assert len(b) == len(m) n = len(b) b0, m0 = 0, 1 for i in range(n): assert 1 <= m[i] b1 = b[i] % m[i] m1 = m[i] if m0 < m1: m0, m1 = m1, m0 b0, b1 = b1, b0 if m0 % m1 == 0: # m0 = lcm(m0, m1), m1 = gcd(m0, m1) なので b0 ≡ b1 (mod m1) が解が存在する条件であり、b0が解になる if b0 % m1 != b1: return 0, 0 continue # m0 * p + m1 * q = gcd(m0, m1) d, p = gcd_inverse(m0, m1) q = m1 // d # b0 ≡ b1 (mod gcd(m0, m1)) の不成立 if (b1 - b0) % d: return 0, 0 # x = b0 + (b1 - b0) // g * m0 * p b0 += (b1 - b0) // d % q * p % q * m0 # lcm(m0, m1) m0 *= q return b0, m0 x = [0] * 3 y = [0] * 3 for i in range(3): x[i], y[i] = map(int, input().split()) ans, _ = crt(x, y) print(ans if ans else -1)