結果
| 問題 |
No.186 中華風 (Easy)
|
| コンテスト | |
| ユーザー |
bal4u
|
| 提出日時 | 2019-05-02 18:52:46 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 1 ms / 2,000 ms |
| コード長 | 906 bytes |
| コンパイル時間 | 220 ms |
| コンパイル使用メモリ | 30,080 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-19 18:34:41 |
| 合計ジャッジ時間 | 950 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 23 |
ソースコード
// yukicoder: No. 186 中華風 (Easy)
// 2019.5.2 bal4u
#include <stdio.h>
long long extended_gcd(long long a, long long b, long long *x, long long *y)
{
long long d;
if (b == 0) { *x = 1; *y = 0; return a; }
d = extended_gcd(b, a % b, y, x);
*y -= a / b * (*x);
return d;
}
int chinese(long long *a1, long long *a2, int *a, int *m, int sz)
{
int i;
long long p, q, d, t, r, M;
r = 0, M = 1;
for (i = 0; i < sz; i++) {
d = extended_gcd(M, m[i], &p, &q);
if ((a[i] - r) % d) return 0;
t = (a[i] - r)/d * p % (m[i]/d);
r += M * t;
M *= m[i]/d;
}
*a1 = r % M; if (*a1 < 0) (*a1) += M;
*a2 = M;
return 1;
}
int x[3], y[3];
int main()
{
int i, f;
long long a1, a2;
f = 0; for (i = 0; i < 3; i++) {
scanf("%d%d", x+i, y+i);
if (x[i]) f = 1;
}
if (chinese(&a1, &a2, x, y, 3)) printf("%lld\n", f? a1: a2);
else puts("-1");
return 0;
}
bal4u