結果

問題 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
権限があれば一括ダウンロードができます

ソースコード

diff #

#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;
}
0