博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ2728 HNOI2012与非(并查集+数位dp)
阅读量:5172 次
发布时间:2019-06-13

本文共 1257 字,大约阅读时间需要 4 分钟。

  容易发现x nand x=not x。并且使用这个性质有x and y=not(x nand y)=(x nand y)nand(x nand y)。也就是说nand运算可以作为not和and运算使用。并且显然not和and运算可以表示nand运算,那么两者等价。事实上这就可以表示所有位运算了。

  那么考虑位运算有什么事干不了。注意到如果每个数的第i位都和第j位相同, 那么无论怎么操作这两位都是相同的。大胆猜想这也是充分的,即除了这件事其他都能干。

  这样位就被分成了很多类,每一类的取值要求相同。类似数位dp搞一发考虑第一个未达限制的是哪一位就行了。

  各种细节,调到吐血,拿过7种分数,连过了都不知道是不是数据水了,没救。

#include
#include
#include
#include
#include
#include
using namespace std;#define N 1010#define K 60#define ll long longll read(){ ll x=0,f=1;char c=getchar(); while (c<'0'||c>'9') { if (c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar(); return x*f;}int n,k,d[K][K],fa[K];bool flag[K];ll l,r,num[K];int find(int x){ return fa[x]==x?x:fa[x]=find(fa[x]);}ll calc(ll n){ ll s=0,m=0,cnt=0; for (int i=0;i
n) break; } } for (int i=0;i
0)!=((n&(1ll<
0)) return s; return s+1;}int main(){#ifndef ONLINE_JUDGE freopen("bzoj2728.in","r",stdin); freopen("bzoj2728.out","w",stdout); const char LL[]="%I64d\n";#else const char LL[]="%lld\n";#endif n=read(),k=read(),l=read(),r=read(); if (l>=(1ll<
0)!=((x&(1ll<
0)) d[p][q]=0; } for (int i=0;i

 

转载于:https://www.cnblogs.com/Gloid/p/9600287.html

你可能感兴趣的文章
数据库
查看>>
常见Struts、Hibernate、Spring、J2EE、ibatis、Oracle等开发框架架构图及其简介
查看>>
Java为何大行其道
查看>>
CFileDialog的使用方法简单介绍
查看>>
send,recv,sendto,recvfrom
查看>>
C#开发问题汇总
查看>>
Kettle
查看>>
[复习]Python基础回顾
查看>>
LNMP
查看>>
java 读写锁
查看>>
_itoa_s替换 itoa
查看>>
面试问题
查看>>
Jmeter-【JSON Extractor】-响应结果中一级key取值
查看>>
mysql建库
查看>>
bzoj1066: [SCOI2007]蜥蜴
查看>>
jQuery自定义右键菜单
查看>>
mybatis实现延迟加载多对一
查看>>
JS拖拽,移动与拉伸
查看>>
Linux资源站
查看>>
操作Visual Studio 2010中的SQL Server数据库比较工具
查看>>