結果

問題 No.2953 Maximum Right Triangle
ユーザー ks2mks2m
提出日時 2024-11-08 21:42:59
言語 Java21
(openjdk 21)
結果
AC  
実行時間 204 ms / 2,000 ms
コード長 1,140 bytes
コンパイル時間 3,633 ms
コンパイル使用メモリ 76,972 KB
実行使用メモリ 41,816 KB
最終ジャッジ日時 2024-11-08 21:43:24
合計ジャッジ時間 5,412 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 133 ms
41,272 KB
testcase_01 AC 136 ms
41,236 KB
testcase_02 AC 183 ms
41,528 KB
testcase_03 AC 135 ms
40,988 KB
testcase_04 AC 204 ms
41,336 KB
testcase_05 AC 185 ms
41,376 KB
testcase_06 AC 183 ms
41,816 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import java.util.Scanner;

public class Main {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		int t = sc.nextInt();
		for (int z = 0; z < t; z++) {
			long d = sc.nextInt();
			long x = sc.nextInt();
			long y = sc.nextInt();

			long g = gcd(x, y);
			long gx = x / g;
			long gy = y / g;

			long ok = 0;
			long ng = d + 1;
			while (Math.abs(ok - ng) > 1) {
				long mid = (ok + ng) / 2;
				long nx = x + gy * mid;
				long ny = y - gx * mid;
				if (nx <= d && 0 <= ny) {
					ok = mid;
				} else {
					ng = mid;
				}
			}
			long bx = x + gy * ok;
			long by = y - gx * ok;
			long ans1 = Math.abs(x * by - bx * y);

			ok = 0;
			ng = d + 1;
			while (Math.abs(ok - ng) > 1) {
				long mid = (ok + ng) / 2;
				long nx = x - gy * mid;
				long ny = y + gx * mid;
				if (0 <= nx && ny <= d) {
					ok = mid;
				} else {
					ng = mid;
				}
			}
			bx = x - gy * ok;
			by = y + gx * ok;
			long ans2 = Math.abs(x * by - bx * y);

			System.out.println(Math.max(ans1, ans2));
		}
		sc.close();
	}

	static long gcd(long a, long b) {
		return b == 0 ? a : gcd(b, a % b);
	}
}
0