結果
| 問題 |
No.186 中華風 (Easy)
|
| コンテスト | |
| ユーザー |
t33f
|
| 提出日時 | 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;
}
t33f