結果

問題 No.3301 Make Right Triangle
ユーザー tetra4
提出日時 2025-10-05 16:09:14
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 44 ms / 2,000 ms
コード長 805 bytes
コンパイル時間 3,020 ms
コンパイル使用メモリ 274,792 KB
実行使用メモリ 7,716 KB
最終ジャッジ日時 2025-10-05 16:09:22
合計ジャッジ時間 7,622 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 9
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

using ll = int64_t;

ll T, L;

void input() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> L;
}

void solve() {
    ll p = __builtin_ctzll(L);
    L >>= p;
    if (L == 1) {
        cout << (3ll << (p-2)) << " " << (4ll << (p-2)) << " " << (5ll << (p-2)) << "\n";
        return;
    }
    ll a = (L * L - 1) / 2;
    ll b = a + 1;
    cout << (L << p) << " " << (a << p) << " " << (b << p) << "\n";
}

int main() {
    cin >> T;
    while (T--) {
        input();
        solve();
    }
    return 0;
}

/* 考察
L が 3 以上の奇数のとき
L^2+A^2=B^2 ⇔ (B-A)(B+A)=L^2
B-A=1,B+A=L^2 とすると,A=(L^2-1)/2,B=A+1
L が偶数のときは 2^p で割ってから考える
L が 2 の累乗のときは 3,4,5 を使う.
*/
0