結果
問題 | No.3102 floor sqrt xor |
ユーザー |
![]() |
提出日時 | 2025-04-11 22:59:26 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 41 ms / 2,000 ms |
コード長 | 1,616 bytes |
コンパイル時間 | 3,891 ms |
コンパイル使用メモリ | 275,356 KB |
実行使用メモリ | 7,720 KB |
最終ジャッジ日時 | 2025-04-11 22:59:32 |
合計ジャッジ時間 | 4,898 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 30 |
ソースコード
#include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=a;i<b;i++) #define rrep(i,a,b) for(int i=a;i>=b;i--) #define fore(i,a) for(auto& i:a) #define ff first #define ss second #define all(a) begin(a),end(a) #define allr(a) rbegin(a),rend(a) #define pb push_back using ll =long long; using pii=pair<int,int>; using pll=pair<ll,ll>; using vi=vector<int>; using vll=vector<ll>; template<class T> inline bool chmin(T& a,T b){return a>b?a=b,1:0;} template<class T> inline bool chmax(T& a,T b){return a<b?a=b,1:0;} const int INFI=numeric_limits<int>::max()/2; const ll INFL=numeric_limits<ll>::max()/2; long long sqrtll(long long x) { assert(x >= 0); long long rev = sqrt(x); while(rev * rev > x) --rev; while((rev+1) * (rev+1)<=x) ++rev; return rev; } void solve(){ const ll D=1e6; ll n;cin>>n; ll root=sqrtll(n); for(ll d=0;d<(1<<20);d++){ ll i=(d^root); ll j=n^i; if(i*i<=j&&j<(i+1)*(i+1)){ cout<<j<<'\n'; return; } } cout<<-1<<'\n'; } int main(){ cin.tie(0)->sync_with_stdio(0); /* ll n;cin>>n; ll ans{}; map<ll,ll> mp; for(ll i=0;i<=2*n;i++){ ll tmp=(sqrtll(i)^i); chmax(ans,abs(tmp-i)); mp[i]=tmp; } auto out=[](ll x){ for(int i=0;i<40;i++){ cout<<((x>>i)&1); } cout<<endl; }; fore(i,mp){ cout<<'N'<<endl; out(sqrtll(i.ff)); out(sqrtll(i.ss)); } cout<<endl;*/ int t; cin>>t; while(t--)solve(); return 0; } /* 高々2個っぽい */