結果
| 問題 | No.187 中華風 (Hard) |
| コンテスト | |
| ユーザー |
kenkoooo
|
| 提出日時 | 2015-04-20 09:51:34 |
| 言語 | Java (openjdk 23) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,251 bytes |
| 記録 | |
| コンパイル時間 | 2,561 ms |
| コンパイル使用メモリ | 76,768 KB |
| 実行使用メモリ | 56,936 KB |
| 最終ジャッジ日時 | 2024-07-04 17:29:46 |
| 合計ジャッジ時間 | 8,370 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 6 WA * 19 |
ソースコード
package yukicoder;
import java.util.Scanner;
public class Main {
private static final int MOD = 1000000007;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
long[] X = new long[N];
long[] Y = new long[N];
for (int i = 0; i < N; i++) {
X[i] = sc.nextInt();
Y[i] = sc.nextInt();
}
for (int i = 1; i < N; i++) {
long[] cmt = cmt(X[0], Y[0], X[i], Y[i]);
if (cmt[0] < 0) {
System.out.println(-1);
return;
}
X[0] = cmt[0];
Y[0] = cmt[1];
}
if (X[0] == 0) {
X[0] = Y[0];
}
System.out.println(X[0] % MOD);
}
static long[] extgcd(long a, long b, long[] is) {
if (a == 0) {
is[0] = 0;
is[1] = 1;
is[2] = b;
} else {
extgcd(b % a, a, is);
long x = is[1] - b / a * is[0];
is[1] = is[0];
is[0] = x;
}
return is;
}
static long[] cmt(long a1, long mo1, long a2, long mo2) {
long[] exgcd = extgcd(mo1, mo2, new long[3]);
long g = exgcd[2];
long x = exgcd[0];
a1 %= mo1;
a2 %= mo2;
if (a1 % exgcd[2] != a2 % exgcd[2]) {
return new long[] { -1, 0 };
}
long lcm = mo1 * (mo2 / g);
long v = a1 + ((a2 - a1) % lcm) * x % lcm * (mo1 / g);
return new long[] { ((v % lcm) + lcm) % lcm, lcm };
}
}
kenkoooo