2728: [HNOI2012]与非

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 786  Solved: 371
[Submit][Status][Discuss]

Description

Input

输入文件第一行是用空格隔开的四个正整数N,K,L和R,接下来的一行是N个非负整数A1,A2……AN,其含义如上所述。 100%的数据满足K≤60且N≤1000,0<=Ai<=2^k-1,0<=L<=R<=10^18

Output

仅包含一个整数,表示[L,R]内可以被计算出的数的个数

Sample Input

3 3 1 4
3 4 5

Sample Output

4

HINT

样例1中,(3 NAND 4) NADN (3 NAND 5) = 1,5 NAND 5 = 2,3和4直接可得。

Source

day1

分析:

如果把与非操作换成异或操作应该就是裸的线性基的题目,现在问题就转化为了求与非操作下的线性基...

我们考虑通过与非操作可以得到所有的位运算:

$~A=A nand A$

$A and B=~(A nand B)$

$A orB=~((~A) and (~B))$

$A xor B=(A or B) and (A nand B)$...

然后我们发现所有的位运算,对于某些位置,如果这些位置在每个数字中都相同,那么最后的结果这些位置也是相同的...

而因为我们可以得到所有的位运算所以这些位置最后都可以为$1$,所以我们找出所有相同的位置作为线性基,一组相同的位置是线性基中的一个数...计算出线性基之后随便算一算就好了...

具体找法就是我们选取当前枚举的位置,如果一个数字当前位置为$0$那么把它取反,然后把操作之后的所有数字$and$起来,这样相同的位置一定是$1$...

代码:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
//by NeighThorn
#define int long long
using namespace std; const int maxn=1000+5; int n,k,l,r,cnt,a[maxn],b[maxn],f[maxn]; inline int calc(int x){
if(x==-1)
return -1;
int now=0,ans=0;
for(int i=1;i<=cnt;i++)
if((now|b[i])<=x)
now|=b[i],ans|=(1LL<<cnt-i);
return ans;
} inline void xor_gauss(void){
int lala=(1LL<<k)-1,now;
for(int i=k-1;i>=0;i--)
if(!f[i]){
now=lala;
for(int j=1;j<=n;j++){
if((a[j]>>i)&1)
now&=a[j];
else
now&=~a[j]&lala;
}
b[++cnt]=now;
for(int j=0;j<=i;j++)
if((now>>j)&1)
f[j]=1;
}
} signed main(void){
scanf("%lld%lld%lld%lld",&n,&k,&l,&r);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
xor_gauss();
printf("%lld\n",calc(r)-calc(l-1));
return 0;
}

  


By NeighThorn

BZOJ 2728: [HNOI2012]与非的更多相关文章

  1. BZOJ 2728: [HNOI2012]与非(位运算)

    题意 定义 NAND(与非)运算,其运算结果为真当且仅当两个输入的布尔值不全为真,也就是 A NAND B = NOT(A AND B) ,运算位数不会超过 \(k\) 位, 给你 \(n\) 个整数 ...

  2. BZOJ 2728 HNOI2012 与非 高斯消元

    题目大意:给定k位二进制下的n个数,求[l,r]区间内有多少个数能通过这几个数与非得到 首先观察真值表 我们有A nand A = not A 然后就有not ( A nand B ) = A and ...

  3. 【BZOJ 2728】 2728: [HNOI2012]与非 (线性基?)

    2728: [HNOI2012]与非 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 813  Solved: 389 Description Inpu ...

  4. 【BZOJ2728】[HNOI2012]与非 并查集+数位DP

    [BZOJ2728][HNOI2012]与非 Description Input 输入文件第一行是用空格隔开的四个正整数N,K,L和R,接下来的一行是N个非负整数A1,A2……AN,其含义如上所述.  ...

  5. BZOJ - 2728 与非

    题意: 给定N个数,一个数k和一个范围[L,R].每个数可以使用任意次,k表示与非不超过k位.求出范围内有多少个数可以由他们的与非和表示. 题解: m个数进行NAND,最终的数二进制下某一位如果为1, ...

  6. BZOJ 2730: [HNOI2012]矿场搭建( tarjan )

    先tarjan求出割点.. 割点把图分成了几个双连通分量..只需dfs找出即可. 然后一个bcc有>2个割点, 那么这个bcc就不用建了, 因为一定可以走到其他救援出口. 只有一个割点的bcc就 ...

  7. bzoj 2729: [HNOI2012]排队

    2729: [HNOI2012]排队 Time Limit: 10 Sec Memory Limit: 128 MB Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体 ...

  8. BZOJ 2733: [HNOI2012]永无乡 启发式合并treap

    2733: [HNOI2012]永无乡 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  9. bzoj 2734: [HNOI2012]集合选数 状压DP

    2734: [HNOI2012]集合选数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 560  Solved: 321[Submit][Status ...

随机推荐

  1. 快速搭建lvs + keepalived + nginx

      环境:   VIP         192.168.2.224 LVS        192.168.2.217     centos7 nginx1    192.168.2.231     c ...

  2. 【转】JSP提交表单

    设计表单页面,它是静态页面,使用HTML编写,而且使用了JavaScript脚本语言来验证填写表单数据,表单页面为form.htm,代码如下: <html><head>< ...

  3. php+croppic.js实现剪切上传图片

    最近需要实现裁剪图片上传,想起之前公司用到的一个插件,却不知道叫什么名字了. 在网上找了有些时间,最终找到了这个网站. http://www.croppic.net/ 因为官网文档全部都是英文,所以看 ...

  4. 关于request.getServletContext()方法报错的问题

    可以通过修改pom文件来添加一个javax.servlet-api-3.1.0.jar的jar包,找到你的pom.xml文件添加代码如下: <dependency> <groupId ...

  5. stark组件(2):提取公共视图函数、URL分发和设置别名

    效果图: Handler类里处理的增删改查.路由分发.给URL设置别名等包括以后还要添加的很多功能,每一个数据库的类都需要,所以我们要把Handler提取成一个基类.提取成基类后,每一个数据表都可以继 ...

  6. Cyclic Nacklace HDU - 3746 (kmp)

    Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  7. CCPC_1005

    可怕.....的提.....显而易见的规律活活没照出来...不过说起来却是不能严格证明....于是...脑筋急转弯活活猜不出来..... 1*1->1*2->2*2->2*3-> ...

  8. MongoDB集群部署 - 带访问控制的分片副本集

    1. 前言 Ceilometer将meter.event等数据保存在MongoDB中,之前将MongoDB部署在控制节点上,使用三副本模式,时间长了发现meter数据爆炸式增长,区区2T的磁盘捉襟见肘 ...

  9. Autofac Mvc5 Nuget

    Autofac 3.5.2 Install-Package Autofac -Version 3.5.2 Autofac ASP.NET MVC 5 Integration 3.3.3 Install ...

  10. 7、JavaScript 知识总结

    1.JavaScript的作用 ①JavaScript 为 HTML 设计师提供了一种编程工具 ②JavaScript 可以将动态的文本放入 HTML 页面 ③JavaScript 可以对事件作出响应 ...