問題一覧 > 通常問題

No.3088 XOR = SUM

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / スペシャルジャッジ問題 (複数の解が存在する可能性があります)
タグ : / 解いたユーザー数 76
作問者 : yuusaan / テスター : 👑 amentorimaru
0 ProblemId : 11822 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2025-04-04 10:24:05

問題文

非負整数 NN が与えられます。以下の条件を満たす整数の組 (X,Y)(X,Y) として X×YX\times Y が最大となるものを一つ構築してください。(条件を満たす (X,Y)(X,Y) は少なくとも 11 組は存在します。)

  • 0X,Y0\le X,Y
  • X+YNX+Y\le N
  • XY=X+YX \oplus Y = X + Y

ただし、\oplus はビット毎の排他的論理和を表します。

ビット毎の排他的論理和とは?

xyx \oplus y は、x,yx,y をそれぞれ二進数に直したのち、各桁について排他的論理和(異なる値なら 11,同じ値なら 00)を取ったものです。

例として、 1210=1100(2)1010(2)=0110(2)=6,  100100=012\oplus 10 = 1100_{(2)} \oplus 1010_{(2)} = 0110_{(2)} = 6,\ \ 100 \oplus 100 = 0 です。



TT 個のテストケースすべてについて、答えを求めてください。

入力

TT
case1case_1
case2case_2
\vdots
caseTcase_T

各テストケースは、以下の形式で与えられる。

NN

制約

  • 1T2×1051\le T \le 2\times 10^5
  • 0N10180\le N \le 10^{18}
  • 入力はすべて整数

出力

TT 行出力してください。 ii 行目には、テストケース ii に対する答えを出力してください。条件を満たすものであれば、どれを出力しても正答とみなされます。

最後に改行してください。

サンプル

サンプル1
入力
3
3
0
271828182845904
出力
2 1
0 0
140737488355328 131090694490576

一つ目のテストケースについて、 21=2+1=32\oplus 1 = 2+1=3 であり、条件を満たす (X,Y)(X,Y) として X×YX\times Y が最大になります。

他に (1,2)(1,2) も正答とみなされます。

与えられる NN 及び出力すべき X,YX,Y3232 bit整数型に収まらないことがある点に注意してください。(C++を用いる場合、intの代わりにlong longを使用してください。)

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。