結果
問題 | No.2953 Maximum Right Triangle |
ユーザー |
![]() |
提出日時 | 2024-11-08 23:46:54 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 3 ms / 2,000 ms |
コード長 | 1,383 bytes |
コンパイル時間 | 3,310 ms |
コンパイル使用メモリ | 244,612 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-08 23:47:01 |
合計ジャッジ時間 | 3,812 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 6 |
ソースコード
#include <bits/stdc++.h>#define For(i, a, b) for(int i = a; i < b; i++)#define rep(i, n) For(i, 0, n)#define rFor(i, a, b) for(int i = a; i >= b; i--)#define ALL(v) (v).begin(), (v).end()#define rALL(v) (v).rbegin(), (v).rend()using namespace std;using lint = long long;using ld = long double;int INF = 2000000000;lint LINF = 1000000000000000000;long long gcd(long long x, long long y) {if (y == 0) {return x;}return gcd(y, x % y);}int main() {int t;cin >> t;while (t--) {lint d, x, y;cin >> d >> x >> y;lint g = gcd(x, y);lint dx = x / g, dy = y / g;lint l = 0, r = 1000000010;while (r - l > 1) {lint mid = (l + r) / 2LL;lint nx = x - mid * dy, ny = y + mid * dx;if (0 <= nx && nx <= d && 0 <= ny && ny <= d) {l = mid;} else {r = mid;}}lint l2 = -1000000010, r2 = 0;while (r2 - l2 > 1) {lint mid = (l2 + r2) / 2LL;lint nx = x - mid * dy, ny = y + mid * dx;if (0 <= nx && nx <= d && 0 <= ny && ny <= d) {r2 = mid;} else {l2 = mid;}}lint dxy = dx * dx + dy * dy;cout << max(g * l * dxy, g * abs(r2) * dxy) << endl;}}