hdu3949:XOR
发布时间:2020-12-14 03:50:53 所属栏目:大数据 来源:网络整理
导读:Problem Description XOR is a kind of bit operator,we define that as follow: for two binary base number A and B,let C=A XOR B,then for each bit of C,we can get its value by check the digit of corresponding position in A and B. And for each
Problem Description
XOR is a kind of bit operator,we define that as follow: for two binary base number A and B,let C=A XOR B,then for each bit of C,we can get its value by check the digit of corresponding position in A and B. And for each digit,1 XOR 1 = 0,1 XOR 0 = 1,0 XOR 1 = 1,0 XOR 0 = 0. And we simply write this operator as ^,like 3 ^ 1 = 2,4 ^ 3 = 7. XOR is an amazing operator and this is a question about XOR. We can choose several numbers and do XOR operatorion to them one by one,then we get another number. For example,if we choose 2,3 and 4,we can get 2^3^4=5. Now,you are given N numbers,and you can choose some of them(even a single number) to do XOR on them,and you can get many different numbers. Now I want you tell me which number is the K-th smallest number among them.
?
Input
First line of the input is a single integer T(T<=30),indicates there are T test cases.
For each test case,the first line is an integer N(1<=N<=10000),the number of numbers below. The second line contains N integers (each number is between 1 and 10^18). The third line is a number Q(1<=Q<=10000),the number of queries. The fourth line contains Q numbers(each number is between 1 and 10^18) K1,K2,......KQ.
?
Output
For each test case,first output Case #C: in a single line,C means the number of the test case which is from 1 to T. Then for each query,you should output a single line contains the Ki-th smallest number in them,if there are less than Ki different numbers,output -1.
?
Sample Input
2 2 1 2 4 1 2 3 4 3 1 2 3 5 1 2 3 4 5
?
Sample Output
Case #1: 1 2 3 -1 Case #2: 0 1 2 3 -1
Hint
If you choose a single number,the result you get is the number you choose. Using long long instead of int because of the result may exceed 2^31-1.
?
?
代码如下:
//MT_LI #include<cmath> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> using namespace std; typedef long long ll; ll a[110000]; int n,m; int main() { int T,Case=0; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%lld",&a[i]); bool bk=0;int t=n; for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) if(a[j]>a[i]) swap(a[j],a[i]); if(a[i]==0){bk=1;t=i-1;break;} for(int k=63;k>=0;k--) if(a[i]>>k&1) { for(int j=1;j<=n;j++) if(i!=j&&a[j]>>k&1) a[j]^=a[i]; break; } } scanf("%d",&m); printf("Case #%d:n",++Case); while(m--) { ll x,ans=0ll; scanf("%lld",&x); if(bk==true)x--; if(x>1ll<<t)printf("-1n"); else { for(int i=t-1;i>=0;i--) if(x>>i&1) ans^=a[t-i]; printf("%lldn",ans); } } } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |