P9033 「KDOI-04」XOR Sum 题解
凯文一眼秒了这题,本蒟蒻却做了半个小时。
我们用
无解的情况很好判断,当
我们使
在二进制下,
至于后面的数,我们可以让他们都等于
记得特判
代码
#include<bits/stdc++.h>
#include<cstdio>
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
using namespace std;
int f(int a,int n){//快速幂
int ans=1;
while(n){
if(n&1)ans=ans*a;
a*=a;
n/=2;
}
return ans;
}
int T,n,m,k,m2,k2;
int main(){
T=read();
while(T--){
n=read();k=read();m=read();
m2=log2(m);
k2=log2(k);
if(m2<k2){printf("-1\n");continue;}
if(n==1){
if(k>m)printf("-1\n");
else printf("%d \n",k);
continue;
}
int a1=f(2,k2),a2=0;
printf("%d ",a1);
a2=a1^k;
printf("%d ",a2);
for(int i=3;i<=n;i++)printf("0 ");
printf("\n");
}
return 0;
}