質問の意味:最短を求めているグループの数を、これらのXORの数がUであり、Vです。
ソリューション:1、それはXORパリティ加え見つかりと同じ条件が満たされる前に、U、Vのパリティに相当しました。図2に示すように、元の数よりも数番号に排他的又は分割の数は大きくはならないので、U <= V。
3、当U == V && U == 0、为0,4、U == V && U!= 0、等于U
5、U ^ = 0、考慮に3分割数、U満たさ(VU)/ 2、(VU)/ 2。
。^ B = A + Bに従って6、最短、 - 2 *(&B)はB ^ B =(uは^ X)^ X、+ B =(uは+ X)+、答えと想定しました。 X. U ^ X = U + Xの場合は、組み合わせてもよいです。
#include <ビット/ STDC ++ H> 名前空間STDを使用して、 長い長いLLのtypedef。 #define INT LL の#define MOD 998244353 の#define GCD(M、N)__gcd(M、N) のための#define担当者(I、J、N)(INT iはjは=、iが<= N; I ++) の#defineが(RED I、N、j)のための(INT I = N; I> = J; i--) の#define ME(x、y)はmemsetの(X、Y、はsizeof(x))を INT LCM(INT A、INT B) {* B / GCD(A、B)を返す;} LL quickpow(-1,11,11- B){LL ANS = 1;一方、(B){IF(B&1)ANS = ANS *%のMOD; B >> = 1、*%MODを=;}戻りANS;} // INT euler1(INT X){int型ANS = X;のために(INT iが= 2、iは<= X *; I ++)(X%でのI場合== 0){ans- = ANS / I、一方(X%I == 0)は、x / = I;}もし(X> 1)ans- = ANS / X;戻りANS;} // CONST INT N = 1E7 + 9。INT VIS [n]は、素数[n]は、PHI [N]; int型euler2(INT N){ME(VIS、TRUE); INT LEN = 1;担当者(I、2、N){IF(VIS [I] ){プライム[LEN ++] = I、PHI [i]は= I-1;}の(INT J = 1; J <LEN &&プライム[J] * I <= nであり、j ++){VIS [i *が素数[J] = 0;(I%プライム[j] == 0){;ブレーク; PHI [I *プライム[J] = PHI [I] *プライム[J]}もしそうでなければ{PHI [iが素数[Jを*]] = PHI [I] * PHI [プライム[J]];}}}戻りLEN} の#define INF 0x3f3f3f3f の#define PI ACOS(-1) の#define PII対<整数、整数> の#define Fiの第一 の#define SE第二 # LSON Lを定義し、中間、ルート<< 1 の#define rson中間+ 1、R、根<< 1 | 1 の#define PB一back の#define MP make_pair の#define全て(V)v.begin()、v.end() #defineサイズ(V)(INT)(v.size()) の#define CIN(X)のscanf( "%のLLD"、&x)は、 CONST INT N = 1E7 + 9。 CONSTダブルESP = 1E-6。3 <<てendl; } )(解決無効{ int型、U、V。 CIN >> U >> V; IF(U> V || U%2 = V%2!){ COUT << -1 << ENDL。 リターン; } (U == V && V == 0){もし COUT << U << ENDL。 リターン; } IF(!U == V && V = 0){ COUT << 1 << ENDL << U << ENDL。 リターン; } INT A =(V - U)/ 2。 IF((^ U)== A + U){ COUT << 2 << ENDL。 COUT <<(U + V)/ 2 << "" << << ENDL。 }他{ COUT << 3 << ENDL。 coutの<< U << "" << << "" << <<てendl; } )(主符号付き { // IOS :: sync_with_stdio(偽); int型T; // scanf関数( "%のLLD"、&T)。 //一方(t--) ()を解きます。 }