【BZOJ2728】[HNOI2012]与非

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直接可得。

题解:一开始想用逻辑分析的角度来处理这道题,发现对于本蒟蒻来说实在是处理不了,还是感性理解比较适合我~

我们用一个数nand它本身,就得到了这个数取非,将两个取非的数nand一起自然就是与,有了非和与自然就有了或,有了与,非,或也自然就有了异或,所以只用nand显然是可以表示所有逻辑运算的。

不过这样就能表示所有的数了吗?显然不能,发现如果集合中所有的数的某几位是一样的话,无论怎么运算这几位肯定还是一样的,所以我们只需要统计有多少数的这几位都是一样的就行了。然后我们用并查集处理出有哪些位是一样的,剩下的就交给数位DP就行了(又是INF的细节)。

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
int n,k,tot,s[70];
ll ans,v[1010];
int f[70],mark[70];
int find(int x)
{
return (f[x]==x)?x:(f[x]=find(f[x]));
}
bool check(int a,int b)
{
for(int i=1;i<=n;i++) if(((v[i]>>a-1)^(v[i]>>b-1))&1) return 0;
return 1;
}
ll calc(ll x)
{
if(++x>=(1ll<<k)) return (1ll<<s[k]);
int i;
ans=0;
memset(mark,-1,sizeof(mark));
for(i=k;i;i--)
{
if(x&(1ll<<i-1))
{
if(mark[f[i]]!=1) ans+=1ll<<s[i-1];
if(f[i]==i) mark[i]=1;
if(mark[f[i]]==0) break;
}
else
{
if(f[i]==i) mark[i]=0;
if(mark[f[i]]==1) break;
}
}
return ans;
}
int main()
{
int j;
ll i,l,r;
scanf("%d%d%lld%lld",&n,&k,&l,&r);
for(i=1;i<=n;i++) scanf("%lld",&v[i]);
for(i=1;i<=k;i++)
{
f[i]=i;
for(j=i-1;j;j--) if(check(i,j)&&find(i)!=find(j)) f[f[j]]=f[i];
}
for(i=1;i<=k;i++)
{
s[i]=s[i-1];
if(find(i)==i) s[i]++;
}
printf("%lld",calc(r)-calc(l-1));
return 0;
}

【BZOJ2728】[HNOI2012]与非 并查集+数位DP的更多相关文章

  1. BZOJ2728 HNOI2012与非(并查集+数位dp)

    容易发现x nand x=not x.并且使用这个性质有x and y=not(x nand y)=(x nand y)nand(x nand y).也就是说nand运算可以作为not和and运算使用 ...

  2. hdu 4514 并查集+树形dp

    湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...

  3. BZOJ_2443_[Usaco2011 Open]奇数度数 _并查集+树形DP

    BZOJ_2443_[Usaco2011 Open]奇数度数 _并查集. Description 奶牛们遭到了进攻!在他们的共和国里,有N(1 <= N <=50,000)个城市,由M(1 ...

  4. poj 1417(并查集+简单dp)

    True Liars Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2087   Accepted: 640 Descrip ...

  5. C - BLG POJ - 1417 种类并查集加dp(背包)

    思路:刚看这道题感觉什么都不清楚,人物之间的关系一点也看不出来,都不知道怎么写,连并查集都没看出来,但是你可以仔细分析一下,当输入字符串为“yes”的时候,我们设输入的值为x和y,当x为天使是则由题可 ...

  6. poj1417(带权并查集+背包DP+路径回溯)

    题目链接:http://poj.org/problem;jsessionid=8C1721AF1C7E94E125535692CDB6216C?id=1417 题意:有p1个天使,p2个恶魔,天使只说 ...

  7. HDU 5575 Discover Water Tank 并查集 树形DP

    题意: 有一个水槽,边界的两块板是无穷高的,中间有n-1块隔板(有高度),现有一些条件(i,y,k),表示从左到右数的第i列中,在高度为(y+0.5)的地方是否有水(有水:k = 1),问最多能同时满 ...

  8. HDU 4514 湫湫系列故事——设计风景线(并查集+树形DP)

    湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  9. P2700逐个击破(并查集/树形dp)

    P2700 逐个击破 题目背景 三大战役的平津战场上,傅作义集团在以北平.天津为中心,东起唐山西至张家口的铁路线上摆起子一字长蛇阵,并企图在溃败时从海上南逃或向西逃窜.为了就地歼敌不让其逃走,老毛同志 ...

随机推荐

  1. #define,#undef宏学习

    1.预处理器 1.1预处理符号: __FILE__ :进行编译的源文件名字 __LINE__ :文件当前行的行号 __DATA__ :文件被编译的日期 __TIME__ :文件被编译的时间 __STD ...

  2. ES6方面重点摘要

    1.变量声明(1)内层变量覆盖外层变量(即后面的覆盖前面的)(2)循环变量的声明,i值在全局范围内有效,所以最后输出的都是最后一轮i的值(3)let.const的引入,为JS增加了块级作用域的概念(c ...

  3. log4j教程 4、配置

    上一章介绍log4j的核心组件.本章介绍如何使用配置文件来配置这些核心组件.配置log4j涉及分配级别,定义追加程序,并在配置文件中指定布局的对象. log4j.properties文件是一个键 - ...

  4. 【Java】String和Date、Timestamp之间的转换

    首先,定义一个Format的日期格式: SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 一.S ...

  5. Elasticsearch安装(四), elasticsearch head 插件安装和使用。

    安装方式如下: 一.安装Elasticsearch-Head 1.插件安装方式(推荐) #在Elasticsearch目录下 $/bin/plugin -install mobz/elasticsea ...

  6. EffectiveJava(16)复合优先于继承

    为什么复合优先于继承? 1.继承违反了封装原则,打破了封装性 2.继承会不必要的暴露API细节,称为隐患.比如通过直接访问底层使p.getProperty(K,V)的键值对可以不是String类型 3 ...

  7. ubuntu 12.04上安装wn725n无线网卡驱动

    系统版本:$uname -a Linux yuliang-Veriton-M670G 3.11.0-17-generic #31~precise1-Ubuntu SMP Tue Feb 4 21:25 ...

  8. vsftpd 配置:chroot_local_user与chroot_list_enable userlist_enable userlist_deny详解

    默认情况下,如果设置了 userlist_enable=YES,当 userlist_deny 选项设置为 YES 的时候,userlist_file=/etc/vsftpd.userlist 中列出 ...

  9. Laravel创建项目和安装PHPStorm IDE插件

    一.win10下安装composer1.下载composer.phar,放入php的安装目录https://getcomposer.org/download/1.4.2/composer.phar 2 ...

  10. python测试网页是否能正常登陆

    #!/usr/bin/python #encoding:utf-8 ##实现网页的登陆检查 import HTMLParser import urlparse import cookielib imp ...