hdu3949 XOR xor高斯消元
XOR
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1364 Accepted Submission(s): 402
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.
2
1 2
4
1 2 3 4
3
1 2 3
5
1 2 3 4 5
1
2
3
-1
Case #2:
0
1
2
3
-1
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.
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<string>
#include<queue>
#include<stack>
using namespace std;
#ifdef WIN32
#define LL "%I64d"
#else
#define LL "%lld"
#endif
#define MAXN 110000
typedef long long qword;
void pm(int x)
{
for (int i=;i>=;i--)
printf("%d",(x&(1ll<<i))!=);
printf("\n");
}
qword num[MAXN];
int n,m;
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
int i,j,k;
int x,y,z;
int n;
int nn;
bool flag;
scanf("%d",&nn);
int testid=;
while (testid++,nn--)
{
printf("Case #%d:\n",testid);
scanf("%d",&n);
for (i=;i<n;i++)
{
scanf(LL,&num[i]);
}
int now=;
// for (i=0;i<n;i++)pm(num[i]);
for (i=;i<n;i++)
{
for (j=now+;j<n;j++)
{
if (num[j]>num[now])swap(num[j],num[now]);
}
if (!num[now])break;
for (x=;!(num[now]&(1ll<<x));x--);
for (j=now+;j<n;j++)
{
if (num[j]&(1ll<<x))
num[j]^=num[now];
}
now++;
}
//for (i=0;i<n;i++)pm(num[i]);printf("\n");
flag=false;
for (i=;i<n;i++)
if (!num[i])flag=true;
scanf("%d",&m);
qword rk;
qword ans=;
int pos;
for (i=;i<m;i++)
{
scanf(LL ,&rk);
if (!flag)rk++;
ans=;
rk--;
pos=now-;
if (rk>=(1ll<<now))
{
printf("-1\n");
continue;
}
for (pos=;!(num[]&(1ll<<pos));pos--);
for (j=now-;j>=;j--)
{
while (pos> && !(num[now-j-]&(1ll<<pos)))pos--;
if (rk&(1ll<<j))
{
if (!(ans&(1ll<<pos)))
ans^=num[now-j-];
}else
{
if (ans&(1ll<<pos))
ans^=num[now-j-];
}
}
/*
qword l=0,r=(1ll<<now);
qword mid;
for (i=0;i<now;i++)
{
if (!(ans&(1<<i)))
{
mid=l+(1<<(now-i-1));
}
}*/
printf(LL "\n",ans);
}
}
return ;
}
hdu3949 XOR xor高斯消元的更多相关文章
- HDU3949:XOR(高斯消元)(线性基)
传送门 题意 给出n个数,任意个数任意数异或构成一个集合,询问第k大个数 分析 这题需要用到线性基,下面是一些资料 1.高斯消元&线性基&Matirx_Tree定理 笔记 2.关于线性 ...
- BZOJ 2115 Wc2011 Xor DFS+高斯消元
标题效果:鉴于无向图.右侧的每个边缘,求一个1至n路径,右上路径值XOR和最大 首先,一个XOR并能为一个路径1至n简单的路径和一些简单的XOR和环 我们开始DFS获得随机的1至n简单的路径和绘图环所 ...
- HDU 3949 XOR(高斯消元搞基)
HDU 3949 XOR pid=3949" target="_blank" style="">题目链接 题意:给定一些数字,问任取几个异或值第 ...
- HDU 3949:XOR(高斯消元+线性基)
题目链接 题意 给出n个数,问这些数的某些数xor后第k小的是谁. 思路 高斯消元求线性基. 学习地址 把每个数都拆成二进制,然后进行高斯消元,如果这个数字这一位(列)有1,那么让其他数都去异或它,消 ...
- HDU 3949 XOR(高斯消元)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 题意:给出一个长度为n的数列A.选出A的所有子集(除空集外)进行抑或得到2^n-1个数字,去重排 ...
- SGU 275 To xor or not to xor (高斯消元)
题目链接 题意:有n个数,范围是[0, 10^18],n最大为100,找出若干个数使它们异或的值最大并输出这个最大值. 分析: 一道高斯消元的好题/ 我们把每个数用二进制表示,要使得最后的异或值最大, ...
- SGU 275 To xor or not to xor(高斯消元)
题意: 从n个数中选若干个数,使它们的异或和最大.n<=100 Solution 经典的异或高斯消元. //O(60*n) #include <iostream> using nam ...
- SGU 275 To xor or not to xor【最大xor和 高斯消元】
题目大意:给你n个数(n<=100)要你找出若干个数使他们的异或和最大 思路:高斯-若当消元消完以后削成若干个独立的行向量,将它们异或起来就好 #include<cstdio> #i ...
- 【bzoj2115】[Wc2011] Xor【高斯消元】
题目大意:给出一个无向有权图,找出一条从1到n的路径,使得路径上权值的异或和最大,路径可以重复走 Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条 ...
随机推荐
- java中使用队列:java.util.Queue
在java5中新添加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口.Queue使用时要尽量避免Collection的add()和 ...
- [Angular 2] 8. Better ES5 Code
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- mysql触发器的作用及语法
触发器是一种特殊的存储过程,它在插入,删除或改动特定表中的数据时触发运行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力. 数据库触发器有下面的作用: 1.安全性.能够基于数据库的值使用户具有 ...
- How to manage and balance “Huge Data Load” for Big Kafka Clusters---reference
1. Add Partition Tool Partitions act as unit of parallelism. Messages of a single topic are distribu ...
- 应用Druid监控SQL语句的执行情况--转载
Druid是什么? Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBo ...
- Windows下Memcached在.Net程序中的实际运用(从Memcached客户端Enyim的库的编译到实际项目运用)
1.一点基础概念 2.获取EnyimMemcached客户端的源代码并编译出动态库 3.Memcached的服务器安装(windows server) 4.在web项目中实战 一.基础概念 memca ...
- NDK-r7以上版本部署方法
一.关于NDK: NDK全称:Native Development Kit. 1.NDK是一系列工具的集合. NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和jav ...
- Linux网络相关命令小结
# ifconfig # ifup/ifdown # route -n # ip link show //显示本机所有接口信息 # traceroute # netstat //查看本机网络连接与后门 ...
- C#/.net七牛云存储上传图片(文件)操作
七牛云存储官方: C#SDK(http://developer.qiniu.com/docs/v6/sdk/csharp-sdk.html) 注册成为标准用户就可获得:10GB永久免费存储空间/ 每月 ...
- .Net程序员学习Linux(二)
本次知识点:递归命令符,wc命令,文档编辑器 vi的简单使用,文本常用操作命令,find查询文件命令,grep匹配文本中对应的关键字 递归命令符 递归对于程序猿来说不默认,经常用于级联关系,一层套一层 ...