結果
問題 |
No.186 中華風 (Easy)
|
ユーザー |
![]() |
提出日時 | 2018-11-24 15:56:24 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,082 bytes |
コンパイル時間 | 436 ms |
コンパイル使用メモリ | 54,492 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-19 18:32:57 |
合計ジャッジ時間 | 1,111 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 23 |
ソースコード
#include <iostream> using namespace std; long long modinv(long long a, long long m) { long long x = m, y = a, p = 1, q = 0, r = 0, s = 1; while (y != 0) { long long u = x / y; long long x0 = y; y = x - y * u; x = x0; long long r0 = p - r * u, s0 = q - s * u; p = r; r = r0; q = s; s = s0; } return q < 0 ? q + m : q; } long long CRT(long long a, long long x, int b, int y) { long long g = a, h = b; while (h > 0) { long long t = g; g = h; h = t % h; } if ((y - x) % g != 0) return -1; long long t = (y - x) / g % b * modinv(a/g, b/g) % b; long long ans = (x + a * t) % (a/g*b); if (ans < 0) ans += a/g*b; return ans; } long long lcm(long long a, long long b) { long long x = a, y = b; while (y > 0) { long long z = x; x = y; y = z % y; } return a / x * b; } int main() { int a, x, b, y, c, z; cin >> x >> a >> y >> b >> z >> c; long long ans = CRT(a, x, b, y); if (ans >= 0) ans = CRT(lcm(a, b), ans, c, z); if (ans == 0) ans = lcm(a, lcm(b, c)); cout << ans << endl; }