【HDU3949】XOR
【题目大意】
给定一个数组,求这些数组通过异或能得到的数中的第k小是多少。
传送门:http://vjudge.net/problem/HDU-3949
【题解】
首先高斯消元求出线性基,然后将k按照二进制拆分即可。
注意当高斯消元结束后若末尾有0则第1小是0 特判一下然后k--。
然后HDU输出long long是用%I64d 无论C++还是G++都是。(虽然我用了lld也AC了)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
#define MAXN 10010
ll T,n,m,flag,a[MAXN];
inline ll read()
{
ll x=,f=; char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-; ch=getchar();}
while(isdigit(ch)) {x=x*+ch-''; ch=getchar();}
return x*f;
}
void guess()
{
ll temp=;
for(ll i=(1ll<<),j;i;i>>=)
{
for(j=temp+;j<=n;j++) if(a[j]&i) break;
if(j>n) continue;
swap(a[++temp],a[j]);
for(ll j=;j<=n;j++) if(j!=temp&&(a[j]&i)) a[j]^=a[temp];
}
flag=(temp!=n);
n=temp;
}
ll ask(ll x)
{
x-=flag; ll ans=;
if(!x) return ;
for(int i=n;i;i--) {if(x&) ans^=a[i]; x>>=;}
if(x) return -;
return ans;
}
int main()
{
//freopen("cin.in","r",stdin);
//freopen("cout.out","w",stdout);
T=read();
for(int CASE=;CASE<=T;CASE++)
{
printf("Case #%d:\n",CASE);
n=read();
for(int i=;i<=n;i++) a[i]=read();
guess();
m=read();
for(int i=;i<=m;i++) {ll x=read(); printf("%I64d\n",ask(x));}
}
return ;
}
附上makedata程序:
#include<iostream>
#include<cstdio>
#include<ctime>
#include<cstdlib>
using namespace std;
int main()
{
freopen("cin.in","w",stdout);
srand(time(NULL));
int T=;
printf("%d\n",T);
while(T--)
{
int n=; printf("%d\n",n);
for(int i=;i<=n;i++) printf("%I64d ",(long long)rand()*rand()*rand());
int m=; printf("\n%d\n",m);
for(int i=;i<=m;i++) printf("%d ",rand()%n+);
printf("\n");
}
return ;
}
【HDU3949】XOR的更多相关文章
- 【BZOJ2337】Xor和路径(高斯消元)
[BZOJ2337]Xor和路径(高斯消元) 题面 BZOJ 题解 我应该多学点套路: 对于xor之类的位运算,要想到每一位拆开算贡献 所以,对于每一位拆开来看 好了,既然是按位来算 我们就只需要计算 ...
- 【BZOJ2115】Xor(线性基)
[BZOJ2115]Xor(线性基) 题面 BZOJ Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si ...
- BZOJ 2115 【Wc2011】 Xor
Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...
- 【BZOJ-2115】Xor 线性基 + DFS
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2142 Solved: 893[Submit][Status] ...
- 【bzoj2115】 Xor
www.lydsy.com/JudgeOnline/problem.php?id=2115 (题目链接) 题意 给出一张图,可能有重边和自环,在图中找出一条从1-n的路径,使得经过的路径的权值的异或和 ...
- 【bzoj2115】【wc2011】Xor
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 5380 Solved: 2249[Submit][Status ...
- bzoj2115【WC2001】Xor
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MB Submit: 2059 Solved: 856 [Submit][Statu ...
- 【整理】XOR:从陌生到头晕
一:解决XOR常用的方法: 在vjudge上面输入关键词xor,然后按照顺序刷了一些题. 然后大概悟出了一些的的套路: 常用的有贪心,主要是利用二进制的一些性质,即贪心最大值的尽量高位取1. 然后有前 ...
- 【CF242E】Xor Segment
题目大意:给定一个长度为 N 的序列,支持两种询问,即:区间异或,区间求和. 题解:加深了对线段树的理解. 对于线段树维护的变量一定是易于 modify 的,对于查询的答案只需用维护的东西进行组合而成 ...
随机推荐
- Android 进阶14:源码解读 Android 消息机制( Message MessageQueue Handler Looper)
不要心急,一点一点的进步才是最靠谱的. 读完本文你将了解: 前言 Message 如何获取一个消息 Messageobtain 消息的回收利用 MessageQueue MessageQueue 的属 ...
- js 扩展实例
//扩展实例1 字符串中首字符转大写 var test=' this is '; String.prototype.mytrim=function(){ var re=/^\s+(.*?)\s+$/; ...
- Python之numpy库
NumPy库知识结构 更多详细内容参考:http://www.cnblogs.com/zhanglin-0/p/8504635.html
- LA2218 Triathlon
题意 PDF 分析 设出长度\(x,y,1-x-y\),就是关于它们的二元一次不等式,判断有没有解. 可以用半平面交来解决. x/V[i]+y/U[i]+(1-x-y)/W[i] < x/V[j ...
- 谨慎安装Python3.7.0,SSL低版本导致Pip无法使用
最新新配置了一台服务器.安装 的时候直接使用了最新的Python 3.7最新版本. 安装成功,编译成功.但是用pip 安装包的时候提示:pip is configured with locations ...
- Sentry的授权模型
首先在jdbc中指定的hive用户是一个linux的用户(必须和一个同名linux用户一一对应):这个用户如果是管理员用户,那么可以进行管理工作:比如创建.删除角色,查看角色和用户绑定情况等等:如果不 ...
- Java 成员方法的定义
方法的定义: 方法是类或对象的行为特征的抽象. Java中的方法不能独立存在,所有的方法必须定义在类中. 使用 “类名.方法” 或 “对象.方法” 的形式调用. 语法格式: 权限修饰符 返回值类型 方 ...
- Volley的post使用
直接看代码,注意在manifest中加入Internet权限 <uses-permission android:name="android.permission.INTERNET&qu ...
- delphi 理解ParamStr
delphi 理解ParamStr 演示代码如下 ::code procedure TForm1.FormCreate(Sender: TObject); var i: Integer; begi ...
- 监控mysql 脚本
监控mysql脚本 http://oldboy.blog.51cto.com/2561410/986905