結果
問題 | No.3102 floor sqrt xor |
ユーザー |
![]() |
提出日時 | 2025-04-11 21:54:49 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 969 bytes |
コンパイル時間 | 4,573 ms |
コンパイル使用メモリ | 251,868 KB |
実行使用メモリ | 7,720 KB |
最終ジャッジ日時 | 2025-04-11 21:54:58 |
合計ジャッジ時間 | 6,004 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 30 |
ソースコード
#include <stdio.h> #include <atcoder/all> #include <bits/stdc++.h> using namespace std; using namespace atcoder; using mint = modint998244353; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000001 #define Inf64 4000000000000000001LL long long sq(long long n){ long long res = sqrt(n); while(res*res>n)res--; while((res+1)*(res+1)<=n)res++; return res; } int main(){ int _t; cin>>_t; rep(_,_t){ long long n; cin>>n; if(n==0){ cout<<0<<endl; continue; } string s= ""; long long t = n; while(t!=0){ s += '0' + t%2; t /= 2; } reverse(s.begin(),s.end()); long long ans = 0; rep(i,s.size()/2){ if(s[i]=='1'){ ans |= 1LL << (s.size()-1-i); } } long long A = sq(ans); long long B = sq(ans + (1LL << (s.size()-s.size()/2))); bool f = false; for(long long i=A;i<=B;i++){ if(sq(n ^ i) == i){ cout<<(n^i)<<endl; f = true; break; } } if(!f)cout<<-1<<endl; } return 0; }