我觉得xor这东西特别神奇,最神奇的就是这个性质了 A xor B xor B=A
这样就根本不用在意重复之类的问题了
关于xor的问题大家可以去膜拜莫队的《高斯消元解XOR方程组》,里面写的很详细
我来扯两道bzoj上的例题好了
bzoj2115,求1-N最长xor路径,根据那个神奇的性质,我们先随便找一条1-n的路径作为标准路径
任意一条1-N的路径都等价于标准路径和某些环的xor
怎么找环?很简单,bfs下去,设d[x]表示1到x的一条路径xor值,如果到一条边x-->y时y已经访问过了,那么d[x] xor d[y] xor w[x,y]就是一个环
然后这个问题就转变成了求一堆数中任意数xor最大的问题,这我们是通过求线性基然后按位贪心就可以了
type node=record
po,next:longint;
num:int64;
end; var f:array[..] of int64;
d:array[..] of int64;
q,p:array[..] of int64;
a:array[..] of int64;
e:array[..] of node;
x,y,i,n,m,len,t:longint;
ans,z:int64; procedure add(x,y:longint;z:int64);
begin
inc(len);
e[len].po:=y;
e[len].num:=z;
e[len].next:=p[x];
p[x]:=len;
end; procedure bfs;
var h,r,i,x,y:longint;
begin
fillchar(d,sizeof(d),);
d[]:=;
h:=; r:=; q[]:=;
while h<=r do
begin
x:=q[h];
i:=p[x];
while i<> do
begin
y:=e[i].po;
if d[y]=- then
begin
d[y]:=d[x] xor e[i].num;
inc(r);
q[r]:=y;
end
else if d[y] xor d[x] xor e[i].num<> then //找环
begin
inc(t);
a[t]:=d[y] xor d[x] xor e[i].num;
end;
i:=e[i].next;
end;
inc(h);
end;
end; procedure gauss;
var i,j:longint;
begin
for i:= to t do
for j:= downto do
if a[i] and (int64() shl j)> then //求线性基
begin
if f[j]= then
begin
f[j]:=a[i];
break;
end
else a[i]:=a[i] xor f[j];
end; ans:=d[n];
for i:= downto do
if ans and (int64() shl i)= then ans:=ans xor f[i];
end; begin
readln(n,m);
for i:= to m do
begin
readln(x,y,z);
add(x,y,z);
add(y,x,z);
end;
bfs;
gauss;
writeln(ans);
end.
bzoj2844
一堆数xor能产生数的种类数就是2^线性基的秩
并且每个数出现的次数是一样的(求证明)
然后我们就可以做了,注意这里的线性基要用高斯消元求而不能用上题的方法
因为要计算某个数出现在第几位,必须使线性基相互xor的数的大小满足二进制位的大小关系
举个例子,比如线性基a,b,c并且a>b>c,如果取a,b xor,选取状况为110,这样选取xor的数一定要比011这样选大,我们称之为满足二进制大小关系(我自己口胡的名词)
const mo=; var a,d:array[..] of longint;
f,b:array[..] of longint;
k,p,i,j,n,ans,m,t:longint; procedure swap(var a,b:longint);
var c:longint;
begin
c:=a;
a:=b;
b:=c;
end; begin
readln(n);
for i:= to n do
read(a[i]);
d[]:=;
for i:= to n do
d[i]:=d[i-]* mod mo; readln(m);
k:=n;
for i:= to n do
begin
for j:=i+ to n do
if a[i]<a[j] then swap(a[i],a[j]);
if a[i]= then
begin
k:=i-;
break;
end;
for j:= downto do
if a[i] and ( shl j)> then
begin
b[i]:=j;
for p:= to n do
if (p<>i) and (a[p] and ( shl j)>) then
a[p]:=a[p] xor a[i];
break;
end;
end;
ans:=;
for i:= to k do
if m and ( shl b[i])> then
begin
m:=m xor a[i];
ans:=(ans+d[k-i+n-k]) mod mo;
end; writeln(ans);
end.
关于高斯消元解决xor问题的总结的更多相关文章
-
【高斯消元解xor方程】BZOJ1923-[Sdoi2010]外星千足虫
[题目大意] 有n个数或为奇数或为偶数,现在进行m次操作,每次取出部分求和,告诉你这几次操作选取的数和它们和的奇偶性.如果通过这m次操作能得到所有数的奇偶性,则输出进行到第n次时即可求出答案:否则输出 ...
-
【高斯消元解xor方程组】BZOJ2466-[中山市选2009]树
[题目大意] 给出一棵树,初始状态均为0,每反转一个节点的状态,相邻的节点(父亲或儿子)也会反转,问要使状态均为1,至少操作几次? [思路] 一场大暴雨即将来临,白昼恍如黑夜!happy! 和POJ1 ...
-
POJ 1222 EXTENDED LIGHTS OUT(高斯消元解XOR方程组)
http://poj.org/problem?id=1222 题意:现在有5*6的开关,1表示亮,0表示灭,按下一个开关后,它上下左右的灯泡会改变亮灭状态,要怎么按使得灯泡全部处于灭状态,输出方案,1 ...
-
Light OJ 1272 Maximum Subset Sum 高斯消元 最大XOR值
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011686226/article/details/32337735 题目来源:problem=12 ...
-
HDU 4418 高斯消元解决概率期望
题目大意: 一个人在n长的路径上走到底再往回,走i步停下来的概率为Pi , 求从起点开始到自己所希望的终点所走步数的数学期望 因为每个位置都跟后m个位置的数学期望有关 E[i] = sigma((E[ ...
-
高斯消元与xor方程组
;i<=n;i++) { ;j<=n;j++) if(a[j]>a[i]) swap(a[i],a[j]); if(!a[i]) break; ;j>=;j--) ) { ;k ...
-
BZOJ 2844 albus就是要第一个出场 ——高斯消元 线性基
[题目分析] 高斯消元求线性基. 题目本身不难,但是两种维护线性基的方法引起了我的思考. void gauss(){ k=n; F(i,1,n){ F(j,i+1,n) if (a[j]>a[i ...
-
BZOJ 3143 HNOI2013 游走 高斯消元 期望
这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...
-
BZOJ 1770: [Usaco2009 Nov]lights 燈( 高斯消元 )
高斯消元解xor方程组...暴搜*元+最优性剪枝 -------------------------------------------------------------------------- ...
随机推荐
-
oracle去重
oracle去重 create table tmp_table3 as (SELECT seqno FROM (SELECT t.seqno,ROWID, ROW_NUMBER() OVER(PART ...
-
Book Review: PowerShell 3.0 Advanced Administration Handbook
Recently I read a book, PowerShell 3.0 Advanced Administration Handbook, which I found really worthy ...
-
快还要更快,让PHP 7 运行更加神速
导读 PHP 7 比5.x 快上很多,即使只有单纯的版本升级就已经很有感,不过大家还是希望它变得越来越快,这时再做些小调整就会更有fu,Let's try it! 事前准备 说到PHP 7,那一定跑不 ...
-
php文件读写锁
$file = fopen("test.txt", $fileOpenMode); flock($file, $lockMode) or die("Can't lock& ...
-
ASP.NET 模板引擎 - NVelocity
1,HTML的Form表单数据按Button提交数据以后,由 Action 指定的服务器端处理程序(.ashx)进行处理后 ,再响应的浏览器. 2,我们把 HTML的表单,写到 .ashx 一般处理程 ...
-
Graylog安装配置
ES集群健康检测:curl -sXGET http://localhost:9200/_cluster/health?pretty=true | grep "status" | a ...
-
[android] AndroidManifest.xml【 manifest ->; uses-permission】
在 API Level 1 时被引入 简介: 在某些情况下,你为app设置的权限将会影响到google应用商店会用何种规则来过滤你的APP. 如果你需要一个硬件相关的权限——CAMERA,googl ...
-
java中的静态分派和动态分派
多态是java的基本特征之一,多态即一个对象具有多种形态(多种表达形式,猴子是动物的一种的表现形式),例如:子类是父类的一种形态. 当方法重载时,就会涉及到多态. 1:在重载时是通过参数的静态类型,而 ...
-
MVC MVVM和传统三层的理解
才学疏浅,请勿喷,如果有理解不对的地方请留言 其实,每个小小的程序员都有个毛病,就是反复写一个东西会觉得这个东西没有新意. 就像让你写三层,你却还是觉得想写MVC模式. 软件小公司做B/S的大部分还是 ...
-
【ACM】Largest prime factor
/*打表把素数能组合的数先设置成相应的位数*/ /* if n equals two and n is No.1 position of prime factors so four position ...