BZOJ 2728 HNOI2012 与非 高斯消元
题目大意:给定k位二进制下的n个数,求[l,r]区间内有多少个数能通过这几个数与非得到
首先观察真值表 我们有A nand A = not A
然后就有not ( A nand B ) = A and B
与和非都弄到了,我们就能够做出一切逻辑运算了,比方说或和异或
A or B = not ( ( not A ) and ( not B ) )
A xor B = ( A or B ) and ( A nand B )
然后我们对于位运算能够发现一个性质
对于某两位来说。假设对于每个数。这两位上的值都是同样的,那么这两位不管怎么计算终于结果都会是同样的
比方说10(1010)和7(0111),第一位和第三位都是同样的。所以最后不管怎么计算,这两位都是一样的
然后我们这么处理:
对于每一位,我们枚举每个数,若该数该位上为0。我们就对这个数取非
然后把全部数取与
该位上都是1,所以取与后一定是1。对于其它位,仅仅要有这两位不同的数存在,那么这位一定是0
最后取与的结果中与该位所有同样的位都是1,其余都是0
对于每一位这样处理,标记去重,然后能够得到线性基,保证每一位存在且仅存在于线性基中的一个数上
拿去从大到小贪心处理就可以 得到二进制序列即为答案
此题有坑 题目描写叙述中1<=L<=R<=10^18 可是第七个点L=0 坑死一票人啊
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define M 1010
using namespace std;
typedef long long ll;
int n,k;
ll digit,l,r,a[M],basis[70],tot;
bool v[70];
ll Get_Digit(ll x)
{
if(x==-1)
return -1;//坑比!!!
ll now=0,re=0;
int i;
for(i=1;i<=tot;i++)
if( (now|basis[i])<=x )
now|=basis[i],re|=(1ll<<tot-i);
return re;
}
int main()
{ //freopen("nand.in","r",stdin);
//reopen("nand.out","w",stdout); int i,j;
ll now;
cin>>n>>k>>l>>r;
digit=(1ll<<k)-1;
for(i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(i=k-1;~i;i--)
if(!v[i])
{
now=digit;
for(j=1;j<=n;j++)
if( a[j]&(1ll<<i) )
now&=a[j];
else
now&=~a[j]&digit;
basis[++tot]=now;
for(j=0;j<=i;j++)
if( now&(1ll<<j) )
v[j]=1;
}
cout<<Get_Digit(r)-Get_Digit(l-1)<<endl;
}
//lld
BZOJ 2728 HNOI2012 与非 高斯消元的更多相关文章
- [BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash)
[BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash) 题面 扔很多次硬币后,用H表示正面朝上,用T表示反面朝上,会得到一个硬币序列.比如HTT表示第一次正面朝上, ...
- BZOJ 3143 HNOI2013 游走 高斯消元 期望
这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...
- BZOJ 2337 XOR和路径 | 高斯消元 期望 位运算
BZOJ 2337 XOR和路径 题解 这道题和游走那道题很像,但又不是完全相同. 因为异或,所以我们考虑拆位,分别考虑每一位: 设x[u]是从点u出发.到达点n时这一位异或和是1的概率. 对于所有这 ...
- BZOJ 4004 JLOI2015 装备购买 高斯消元+线性基
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4004 Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装 ...
- bzoj 3143: [Hnoi2013]游走 高斯消元
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1026 Solved: 448[Submit][Status] ...
- bzoj 2115: [Wc2011] Xor xor高斯消元
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 797 Solved: 375[Submit][Status] ...
- BZOJ 3503: [Cqoi2014]和谐矩阵( 高斯消元 )
偶数个相邻, 以n*m个点为变量, 建立异或方程组然后高斯消元... O((n*m)^3)复杂度看起来好像有点大...但是压一下位的话就是O((n*m)^3 / 64), 常数小, 实际也跑得很快. ...
- BZOJ 2115 Wc2011 Xor DFS+高斯消元
标题效果:鉴于无向图.右侧的每个边缘,求一个1至n路径,右上路径值XOR和最大 首先,一个XOR并能为一个路径1至n简单的路径和一些简单的XOR和环 我们开始DFS获得随机的1至n简单的路径和绘图环所 ...
- BZOJ 2707: [SDOI2012]走迷宫 [高斯消元 scc缩点]
2707: [SDOI2012]走迷宫 题意:求s走到t期望步数,\(n \le 10^4\),保证\(|SCC| \le 100\) 求scc缩点,每个scc高斯消元,scc之间直接DP 注意每次清 ...
随机推荐
- hdoj--3635--Dragon Balls(并查集记录深度)
Dragon Balls Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- UVA-1335(UVALive-3177) Beijing Guards 贪心 二分
题面 题意:有n个人为成一个圈,其中第i个人想要r[i]种不同的礼物,相邻的两个人可以聊天,炫耀自己的礼物.如果两个相邻的人拥有同一种礼物,则双方都会很不高兴,问最少需要多少种不同的礼物才能满足所有人 ...
- Nginx实现负载均衡 + Keepalived实现Nginx的高可用
前言 使用集群是大中型网站解决高并发.海量数据问题的常用手段.当一台服务器的处理能力.存储空间不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求 ...
- A - Dubstep
Problem description Vasya works as a DJ in the best Berland nightclub, and he often uses dubstep mus ...
- Map初始化
转载至:http://blog.csdn.net/dujianxiong/article/details/54849079 第一种方法:static块初始化 public class Demo{ pr ...
- 第4章 部署模式 Deployment Plan(部署规划)
已开发了基于组件的应用程序,该应用程序在逻辑上构造为多层结构,如 Three-Layered Services Application. 中所述.您希望将它分布到一组在物理上为多级结构的服务器上,如 ...
- Install opencv on Centos
研究centos 有很长一段时间了,一直没有写过这方面的感觉,今天在看到网友的一篇文章时,结合亲身体会就下面安装opencv的一些步骤与大家共享. CentOS OpenCV已被广泛应用但是也在不断的 ...
- hiho一下 第172周
题目1 : Matrix Sum 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 You are given an N × N matrix. At the beginn ...
- Android App退出检测
app的退出检测是很难的,但是获取app“要退出”的状态就容易多了,退出的瞬间并不是真的退出了,ActivityManager要销毁activity,也需要一些时间和资源的. 先见下面的运行效果: ...
- 【Oracle】RAC控制文件多路复用
1.—关闭数据库,各个节点都要关闭: [oracle@rac1 ~]$ srvctl stop database -d racdb -o immediate 2.—启动任一节点到nomount状态: ...