题意:

  给定N个数,一个数k和一个范围[L,R]。每个数可以使用任意次,k表示与非不超过k位。求出范围内有多少个数可以由他们的与非和表示。

题解:

  m个数进行NAND,最终的数二进制下某一位如果为1,那么这m个数二进制下这一位也肯定为1。所以如果N个数某些位相同的话就可以把这些位并成一个基。

  因为aNANDa = !a,所以某一位如果为0可以转化为1。

  然后用预处理的基从高位开始贪心的选择。如果当前位取0,则情况数为(1<<cnt-i)-1(不包含0);当前位取1时情况数为1。一共是(1<<cnt-i)。

  题目中L的范围给错了,可能为0。所以当L为0时应该+1即-(-1)。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = ;
int n, k, cnt;
ll l, r, noww;
int vis[N];
ll a[N], w[];
ll digit(ll x) {
if(x==-) return -;
ll res = , val = ;
for(int i = ; i <= cnt; i++) {
if(val+w[i] <= x) {
val += w[i];
res += (1ll<<cnt-i);
}
}
return res;
}
int main() {
scanf("%d%d%lld%lld", &n, &k, &l, &r);
for(int i = ; i <= n; i++) scanf("%lld", &a[i]);
noww = (1ll<<k)-;
for(int i = k-; i >= ; i--) {
if(vis[i]) continue;
ll ed = noww;
for(int j = ; j <= n; j++)
if(a[j]&(1ll<<i)) ed &= a[j];
else ed &= (~a[j]);
for(int j = ; j < i; j++) if(ed&(1ll<<j)) vis[j] = ;
w[++cnt] = ed;
}
printf("%lld", digit(r) - digit(l-));
}

BZOJ - 2728 与非的更多相关文章

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

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

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

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

  3. BZOJ 2728: [HNOI2012]与非

    2728: [HNOI2012]与非 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 786  Solved: 371[Submit][Status][ ...

  4. BZOJ 2728 HNOI2012 与非 高斯消元

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

  5. 平衡树之伸展树(Splay Tree)题目整理

    目录 前言 练习1 BZOJ 3224 普通平衡树 练习2 BZOJ 3223 文艺平衡树 练习3 BZOJ 1588 [HNOI2002]营业额统计 练习4 BZOJ 1208 [HNOI2004] ...

  6. 2018.07.06 BZOJ 1588: HNOI2002营业额统计(非旋treap)

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MB Description 营业额统计 Tiger最近被公司升任为营业部经理,他上 ...

  7. bzoj 3224: Tyvj 1728 普通平衡树【非旋treap】

    就是非旋treap的板子 #include<iostream> #include<cstdio> #include<cstdlib> using namespace ...

  8. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

  9. [PA2014] [BZOJ 3709]~[BZOJ 3719] 合集

    今天起尝试做套题喵~ (当然是因为被最大流的题目弄得恶心死了) 一共是 10 道题一道一道做 预计 3~4 内做完 尽情期待 [BZOJ 3709]Bohater 一眼就能感受到贪心的气息 因为很直观 ...

随机推荐

  1. C/C++获取本机名+本机IP+本机MAC

    本机名.IP.MAC都是一些比较常用网络参数,怎么用C/C++获取呢? 研究了两三个小时... 需要说明的都在代码注释里 #include <stdio.h> #include <W ...

  2. jdbc学习笔记01

    回顾: day01-03,在上一篇文章文末 day04: 分组 group by 统计每个部门的平均工资: select deptno,avg(sal) from emp group by deptn ...

  3. Tinyhttpd 知识点

    1. fork 子进程 #include <stdio.h> #include <unistd.h> int main(void) { pid_t pid; ; pid = f ...

  4. Apache Maven(一):快速入门

    Maven 是什么? Maven 是一个项目管理和整合工具.Maven 为开发者提供了一套完整的构建生命周期框架.开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一 ...

  5. Windows下如何安装composer

    相对 来说并不难直接将此文件下载安装即可 1 https://getcomposer.org/Composer-Setup.exe 文件地址由官方提供 https://getcomposer.org/ ...

  6. CentOS7 配置环境

    1.安装CentOS 配置环境 (1)虚拟机中安装CentOS,进入系统使用yum命令不止正常执行…… 原因: 需要设置网卡激活 解决方法: vi /etc/sysconfig/network-scr ...

  7. phpstorm 安装XeDbug

    第一步:根据phpinfo()下载相对应的Xdebug插件,Xdebug下载路径https://xdebug.org/download.php 第二步:将下载好的Xdebug放到 G:\Service ...

  8. Nginx技术深入剖析

    Nginx软件功能模块说明 核心功能模块(Core functionality):主要对应配置文件的Main区块和Events区块. 标准的http功能模块: 企业 场景常用的Nginx http功能 ...

  9. [BZOJ2427][HAOI2010]软件安装(tarjan+树形DP)

    如果依赖关系出现环,那么对于一个环里的点,要么都选要么都不选, 所以每个环可以当成一个点,也就是强连通分量 然后就可以构造出一颗树,然后树形背包瞎搞一下就行了 注意要搞一个虚拟节点当根节点 Code ...

  10. __builtin_popcount() 函数

    详解 该函数的主要作用是计算一个数字的二进制中有多少个1,返回值就是其中1的个数. 它使用一张基于表的方法来进行位搜索,因此这个操作的执行效率很高 此处举一题 P1582 倒水 #include &l ...