[HNOI2012]与非
题目描述
NAND(与非)是一种二元逻辑运算,其运算结果为真当且仅当两个输入的布尔值不全为真。NAND运算的真值表如下(1表示真,0表示假):

两个非负整数的NAND是指将它们表示成二进制数,再在对应的二进制位进行NAND运算。由于两个二进制数的长度可能不等,因此一般约定一个最高位K,使得两个数的二进制表示都不 超过K位,不足K位的在高位补零。给定N个非负整数A1,A2......AN和约定位数K,利用NAND运算与括号,每个数可以使用任意次,请你求出范围[L,R]内可以被计算出的数有多少个。
输入输出格式
输入格式:
输入文件第一行是用空格隔开的四个正整数N,K,L和R,接下来的一行是N个非负整数A1,A2......AN,其含义如上所述。 100%的数据满足K<=60且N<=1000,0<=Ai<=2^k-1,0<=L<=R<=10^18
输出格式:
仅包含一个整数,表示[L,R]内可以被计算出的数的个数
输入输出样例
说明
样例1中,(3 NAND 4) NADN (3 NAND 5) = 1,5 NAND 5 = 2,3和4直接可得。
可以表示出其他所有的位运算
$not\ A=A\ nand\ A$
$A\ and\ B=not\ (A\ nand\ B)$
$A\ or\ B=(not\ A)\ nand\ (not\ B)$
$A\ xor\ B=(A\ and\ not\ B)\ or\ (not\ A\ and\ B)$
所以相当于是这$n$ 个数之间可以做任何位运算。
如果这$n$ 个数中每个数的第$i$ 位和第$j$ 位都相同,那么这$n$ 个数无论怎么运算,最后得到的答案中第$i$ 位和第$j$ 位一定相同
然后就是数位dp
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long lol;
lol tmp[],c[],cnt[],Q[][];
lol a[],k,n,L,R;
lol dfs(lol s,lol x,lol flag)
{lol i,j;
if (x<) return ;
if (!flag)
{
memcpy(tmp,c,sizeof(c));
lol tot=;
for (i=x;i>=;i--)
if (tmp[i]==-)
{
tot++;
for (j=;j<=cnt[i];j++)
{
tmp[Q[i][j]]=;
}
}
return 1ll<<tot;
}
lol ed=((s>>x)&);
lol sum=;
if (c[x]==-)
{
for (i=;i<=ed;i++)
{
for (j=;j<=cnt[x];j++)
{
c[Q[x][j]]=i;
}
sum+=dfs(s,x-,flag&(i==ed));
}
for (j=;j<=cnt[x];j++)
{
c[Q[x][j]]=-;
}
return sum;
}
else
{
if (flag&&c[x]&&ed==) return ;
return dfs(s,x-,flag&(c[x]==ed));
}
}
lol solve(lol s)
{
memset(c,-,sizeof(c));
if (s<) return ;
return dfs(s,k-,(s>>k)?:);
}
int main()
{lol i,j,l,flag;
cin>>n>>k>>L>>R;
for (i=;i<=n;i++)
scanf("%lld",&a[i]);
for (i=k-;i>=;i--)
{
for (j=i-;j>=;j--)
{
flag=;
for (l=;l<=n;l++)
if (((a[l]>>i)&)^((a[l]>>j)&))
{
flag=;break;
}
if (flag==)
Q[i][++cnt[i]]=j;
}
Q[i][]=i;
}
printf("%lld\n",solve(R)-solve(L-));
}
[HNOI2012]与非的更多相关文章
- 【BZOJ 2728】 2728: [HNOI2012]与非 (线性基?)
2728: [HNOI2012]与非 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 813 Solved: 389 Description Inpu ...
- 【BZOJ2728】[HNOI2012]与非 并查集+数位DP
[BZOJ2728][HNOI2012]与非 Description Input 输入文件第一行是用空格隔开的四个正整数N,K,L和R,接下来的一行是N个非负整数A1,A2……AN,其含义如上所述. ...
- BZOJ 2728: [HNOI2012]与非
2728: [HNOI2012]与非 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 786 Solved: 371[Submit][Status][ ...
- BZOJ 2728: [HNOI2012]与非(位运算)
题意 定义 NAND(与非)运算,其运算结果为真当且仅当两个输入的布尔值不全为真,也就是 A NAND B = NOT(A AND B) ,运算位数不会超过 \(k\) 位, 给你 \(n\) 个整数 ...
- BZOJ 2728 HNOI2012 与非 高斯消元
题目大意:给定k位二进制下的n个数,求[l,r]区间内有多少个数能通过这几个数与非得到 首先观察真值表 我们有A nand A = not A 然后就有not ( A nand B ) = A and ...
- BZOJ2728: [HNOI2012]与非
线性基乱搞,非正解= = #include<cstdio> int n,m; typedef long long ll; ll l[60],j,s,t; void up(ll& i ...
- Luogu3220 HNOI2012 与非 数位DP
传送门 题意:给出$N$个范围在$[0,2^k-1]$的整数,定义位运算$NAND$为位运算$AND$的逆运算,求$[L,R]$中有多少数能成为若干个前面给出的整数.若干括号和$NAND$运算组成的表 ...
- 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运算使用 ...
- 【bzoj2728】[HNOI2012]与非
先打出nand表 0 nand 0=1 1 nand 1=0 0 nand 1=1 1 nand 0=1 容易发现(!a)=a nand a 然后(a&b)=!(a nand b) 然后( ...
随机推荐
- 福州大学W班 软件工程课中期调查
问卷地址:https://www.wjx.cn/jq/17054810.aspx
- C语言第十次作业
一.PTA实验作业 题目1:按等级统计学生成绩 1. 本题PTA提交列表 2.设计思路 int i,count =0 用来计未及格数 for i =0 to n if 指针p+i 指向的成绩score ...
- Java作业-网络编程
Java网络编程 关于结合以前的大作业(即我的图书馆管理系统) 我感觉,图书馆管理系统更像是一个偏向于B/S模式的体系,如果想让他可用性变得更好,可以优化的地方只有使用数据库来代替文件,我个人是没有想 ...
- 敏捷冲刺每日报告——Day3
1.情况简述 Alpha阶段第一次Scrum Meeting 敏捷开发起止时间 2017.10.27 00:00 -- 2017.10.28 00:00 讨论时间地点 2017.10.27晚9:30, ...
- JAVA中if多分支和switch的优劣性。
Switch多分支语句switch语句是多分支选择语句.常用来根据表达式的值选择要执行的语句.例如,在某程序中,要求将输入的或是获取的用0-6代表的星期,转换为用中文表示的星期.该需求通过伪代码描述的 ...
- 几种Java的JSON解析库速度对比
java中哪个JSON库的解析速度是最快的? JSON已经成为当前服务器与WEB应用之间数据传输的公认标准,不过正如许多我们所习以为常的事情一样,你会觉得这是理所当然的便不再深入思考 了.我们很少会去 ...
- ajax实现无刷新分页效果
基于jquery.pagination.js实现的无刷新加载分页数据效果. 简介与说明 * 该插件为Ajax分页插件,一次性加载数据,故分页切换时无刷新与延迟.如果数据量较大,加载会比较慢. * 分页 ...
- es6+react.js组件入门初探
React是一个用于构建用户见面的javascript库. React主要用于构建UI,许多人认为React是MVC中的V(视图) React起源于Facebook的内部项目,用来架设Instagra ...
- Python内置函数(51)——hasattr
英文文档: hasattr(object, name) The arguments are an object and a string. The result is True if the stri ...
- 敏捷项目需求拆解&发现用户故事
需求文档和敏捷中的Epic,User Story, Task之间是什么关系以及如何将需求文档转换成敏捷方式的描述,指导开发人员. 一直是很多公司团队比较困扰的问题,那么最近笔者为了解决这些问题,上了一 ...