結果

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

ソースコード

diff #

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

void solve(){
  using ll=long long;
  ll l;
  cin>>l;
  ll x=l;
  while (x%2==0) x/=2;
  if (x==1){
    ll k=l/4;
    cout<<3*k<<" "<<4*k<<" "<<5*k<<endl;
    return;
  }
  ll m=x/2+1,n=x/2;
  ll a=m*m-n*n,b=2*m*n,c=m*m+n*n;
  __int128_t k=l/a;
  __int128_t A=a*k,B=b*k,C=c*k;
  auto f=[&](__int128_t x){
    vector<int> vec;
    while (x){
      vec.push_back(x%10);
      x/=10;
    }
    reverse(vec.begin(),vec.end());
    for (int a:vec) cout<<a;
    return "";
  };
  cout<<f(A)<<" "<<f(B)<<" "<<f(C)<<endl;
}

int main(){
  int t;
  cin>>t;
  while (t--) solve();
}
0