题目大意:给定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 与非 高斯消元的更多相关文章

  1. [BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash)

    [BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash) 题面 扔很多次硬币后,用H表示正面朝上,用T表示反面朝上,会得到一个硬币序列.比如HTT表示第一次正面朝上, ...

  2. BZOJ 3143 HNOI2013 游走 高斯消元 期望

    这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...

  3. BZOJ 2337 XOR和路径 | 高斯消元 期望 位运算

    BZOJ 2337 XOR和路径 题解 这道题和游走那道题很像,但又不是完全相同. 因为异或,所以我们考虑拆位,分别考虑每一位: 设x[u]是从点u出发.到达点n时这一位异或和是1的概率. 对于所有这 ...

  4. BZOJ 4004 JLOI2015 装备购买 高斯消元+线性基

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4004 Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装 ...

  5. bzoj 3143: [Hnoi2013]游走 高斯消元

    3143: [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1026  Solved: 448[Submit][Status] ...

  6. bzoj 2115: [Wc2011] Xor xor高斯消元

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 797  Solved: 375[Submit][Status] ...

  7. BZOJ 3503: [Cqoi2014]和谐矩阵( 高斯消元 )

    偶数个相邻, 以n*m个点为变量, 建立异或方程组然后高斯消元... O((n*m)^3)复杂度看起来好像有点大...但是压一下位的话就是O((n*m)^3 / 64), 常数小, 实际也跑得很快. ...

  8. BZOJ 2115 Wc2011 Xor DFS+高斯消元

    标题效果:鉴于无向图.右侧的每个边缘,求一个1至n路径,右上路径值XOR和最大 首先,一个XOR并能为一个路径1至n简单的路径和一些简单的XOR和环 我们开始DFS获得随机的1至n简单的路径和绘图环所 ...

  9. BZOJ 2707: [SDOI2012]走迷宫 [高斯消元 scc缩点]

    2707: [SDOI2012]走迷宫 题意:求s走到t期望步数,\(n \le 10^4\),保证\(|SCC| \le 100\) 求scc缩点,每个scc高斯消元,scc之间直接DP 注意每次清 ...

随机推荐

  1. 南海区行政审批管理系统接口规范v0.3(规划)4.1.【queryAcceptById】业务明细查询

    加密前:{"time":"1510061005493","username":"GH_DATA_EXCHANGE",&q ...

  2. [MVC.NET] Asp.Net MVC3 简单入门第一季

    转自:http://www.cnblogs.com/fly_dragon/archive/2011/10/12/2208042.html 初识Asp.Net MVC2.0 初识Asp.Net MVC2 ...

  3. php mktime和strtotime

    本文章来给各位同学介绍一下利用php用strtotime或mktime指定日期数据(本周,上周,本月,上月,本季度)实例,希望对各位同学会有所帮助呀. strtotime定义和用法 strtotime ...

  4. jQuery不熟点总结

     jQuery 事件 1 .trigger() 方法触发被选元素的指定事件类型. 2 .delegate() 事件委派  1.不占内存2.可以给未来元素(后期动态添加的元素)添加事件. 2.  添加元 ...

  5. 一个域名如何解析到多个ip地址

    一.域名解析多ip实例 简单一句话: dns 解析时多添加几个不同IP的A记录 例如: 上图中我给域名解析到两个不同的ip,大概等十分钟后我们ping 一下的结果如下 可以看到已经实现了一个域名解析到 ...

  6. 数据科学的完整学习路径(Python版)

    转载自:http://python.jobbole.com/80981/ 英文(原文)连接:https://www.analyticsvidhya.com/learning-paths-data-sc ...

  7. BZOJ 3991 set维护dfs序

    思路: set按照dfn排序 两点之间的距离可以O(logn)算出来 加一个点-> now ans+=dis(pre,now)+dis(now,next)-dis(pre-next); 删一个点 ...

  8. [ Java ] String 轉型 ArrayList

    Lambda 對我而言一很像天書 這個行 Java code 讓我開始有點些微有 Lambda 感覺 https://stackoverflow.com/questions/10706721/conv ...

  9. 如何上传SNAPSHOT类型的JAR文件到nexus中

    在要上传的文件的目录中执行以下命令即可: mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=dubbo -Dversion=2.5.4 ...

  10. eclipse的小技巧

    Eclipse 保存文件时自动格式化代码 很多同学不知道Eclipse有个很有用的功能,就是自动格式源代码的功能,一般大家都是直接Ctrl+Shift+F手动格式化,多浪费时间. 其实Eclipse里 ...