結果
問題 | No.186 中華風 (Easy) |
ユーザー | mikit |
提出日時 | 2019-04-15 10:46:23 |
言語 | Java21 (openjdk 21) |
結果 |
WA
|
実行時間 | - |
コード長 | 7,877 bytes |
コンパイル時間 | 2,467 ms |
コンパイル使用メモリ | 81,212 KB |
実行使用メモリ | 53,768 KB |
最終ジャッジ日時 | 2024-09-22 07:16:02 |
合計ジャッジ時間 | 5,034 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 98 ms
53,300 KB |
testcase_01 | WA | - |
testcase_02 | AC | 55 ms
50,264 KB |
testcase_03 | WA | - |
testcase_04 | AC | 54 ms
50,604 KB |
testcase_05 | AC | 54 ms
50,564 KB |
testcase_06 | AC | 54 ms
50,196 KB |
testcase_07 | AC | 54 ms
50,544 KB |
testcase_08 | AC | 54 ms
50,316 KB |
testcase_09 | WA | - |
testcase_10 | AC | 97 ms
53,384 KB |
testcase_11 | WA | - |
testcase_12 | AC | 54 ms
50,468 KB |
testcase_13 | AC | 54 ms
50,548 KB |
testcase_14 | WA | - |
testcase_15 | WA | - |
testcase_16 | WA | - |
testcase_17 | WA | - |
testcase_18 | WA | - |
testcase_19 | AC | 103 ms
53,672 KB |
testcase_20 | AC | 105 ms
53,124 KB |
testcase_21 | AC | 99 ms
51,980 KB |
testcase_22 | AC | 99 ms
53,768 KB |
ソースコード
import java.io.OutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.UncheckedIOException; import java.util.Objects; import java.nio.charset.Charset; import java.util.StringTokenizer; import java.io.Writer; import java.io.OutputStreamWriter; import java.io.BufferedReader; import java.io.InputStream; /** * Built using CHelper plug-in * Actual solution is at the top * * @author mikit */ public class Main { public static void main(String[] args) { InputStream inputStream = System.in; OutputStream outputStream = System.out; LightScanner in = new LightScanner(inputStream); LightWriter out = new LightWriter(outputStream); YC186 solver = new YC186(); solver.solve(1, in, out); out.close(); } static class YC186 { public void solve(int testNumber, LightScanner in, LightWriter out) { // out.setBoolLabel(LightWriter.BoolLabel.YES_NO_FIRST_UP); LongChineseRemainder cr = new LongChineseRemainder(); try { for (int i = 0; i < 3; i++) { long x = in.longs(), y = in.longs(); cr.grow(x, y); } out.ansln(cr.getR()); } catch (IllegalStateException ex) { out.ansln(-1); } } } static class Vec3i implements Comparable<Vec3i> { public int x; public int y; public int z; public Vec3i(int x, int y, int z) { this.x = x; this.y = y; this.z = z; } public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Vec3i vec3i = (Vec3i) o; return x == vec3i.x && y == vec3i.y && z == vec3i.z; } public int hashCode() { return Objects.hash(x, y, z); } public String toString() { return "(" + x + ", " + y + ", " + z + ")"; } public int compareTo(Vec3i o) { if (x == o.x) { if (y == o.y) { return Integer.compare(z, o.z); } return Integer.compare(y, o.z); } return Integer.compare(x, o.x); } } static class Vec3l implements Comparable<Vec3l> { public long x; public long y; public long z; public Vec3l(long x, long y, long z) { this.x = x; this.y = y; this.z = z; } public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Vec3i vec3i = (Vec3i) o; return x == vec3i.x && y == vec3i.y && z == vec3i.z; } public int hashCode() { return Objects.hash(x, y, z); } public String toString() { return "(" + x + ", " + y + ", " + z + ")"; } public int compareTo(Vec3l o) { if (x == o.x) { if (y == o.y) { return Long.compare(z, o.z); } return Long.compare(y, o.z); } return Long.compare(x, o.x); } } static class LongChineseRemainder { private long r = 0; private long M = 1; public void grow(long b, long m) { Vec3l sol = LongEuclidSolver.solve(M, m); long p = sol.x, d = sol.z; if ((b - r) % d != 0) { throw new IllegalStateException("Given x % " + m + " = " + b + " and x % " + M + " = " + r + ", gcd was " + sol.z); } long tmp = (b - r) / d * p % (m / d); r += M * tmp; M *= m / d; } public long getR() { return r; } } static class LightWriter implements AutoCloseable { private final Writer out; private boolean autoflush = false; private boolean breaked = true; public LightWriter(Writer out) { this.out = out; } public LightWriter(OutputStream out) { this(new BufferedWriter(new OutputStreamWriter(out, Charset.defaultCharset()))); } public LightWriter print(char c) { try { out.write(c); breaked = false; } catch (IOException ex) { throw new UncheckedIOException(ex); } return this; } public LightWriter print(String s) { try { out.write(s, 0, s.length()); breaked = false; } catch (IOException ex) { throw new UncheckedIOException(ex); } return this; } public LightWriter ans(String s) { if (!breaked) { print(' '); } return print(s); } public LightWriter ans(long l) { return ans(Long.toString(l)); } public LightWriter ans(int i) { return ans(Integer.toString(i)); } public LightWriter ansln(int... n) { for (int n1 : n) { ans(n1).ln(); } return this; } public LightWriter ansln(long... n) { for (long n1 : n) { ans(n1).ln(); } return this; } public LightWriter ln() { print(System.lineSeparator()); breaked = true; if (autoflush) { try { out.flush(); } catch (IOException ex) { throw new UncheckedIOException(ex); } } return this; } public void close() { try { out.close(); } catch (IOException ex) { throw new UncheckedIOException(ex); } } } static class LongEuclidSolver { private LongEuclidSolver() { } public static Vec3l solve(long a, long b) { LongEuclidSolver.ReferenceLong p = new LongEuclidSolver.ReferenceLong(), q = new LongEuclidSolver.ReferenceLong(); long d = solve(a, b, p, q); return new Vec3l(p.val, q.val, d); } private static long solve(long a, long b, LongEuclidSolver.ReferenceLong p, LongEuclidSolver.ReferenceLong q) { if (b == 0) { p.val = 1; q.val = 0; return a; } else { long d = solve(b, a % b, q, p); q.val -= (a / b) * p.val; return d; } } private static class ReferenceLong { private long val; } } static class LightScanner { private BufferedReader reader = null; private StringTokenizer tokenizer = null; public LightScanner(InputStream in) { reader = new BufferedReader(new InputStreamReader(in)); } public String string() { if (tokenizer == null || !tokenizer.hasMoreTokens()) { try { tokenizer = new StringTokenizer(reader.readLine()); } catch (IOException e) { throw new UncheckedIOException(e); } } return tokenizer.nextToken(); } public long longs() { return Long.parseLong(string()); } } }