题目链接

x^3x=2x -> x^2x=3x

因为ab+((a&b)<<1)=a+b,x2x=x+2x,所以x和2x的二进制表示中不存在相邻的1。

(或者,因为x+2x=3x,所以x^2x没有抵消任何的1,所以x和2x没有相邻的1)

那么第一问数位DP,第二问上界为\(2^n\),按位DP就行了。

\(f[i]\)表示到第\(i\)位的方案数。每位要么填\(0\)要么填\(1\),所以\(f[i]=f[i-1]+f[i-2]\)。就是斐波那契数列(从斐波那契表示法也能看出与这个DP的类似)。

答案是\(f[n+1]\)(\(2^n\)是\(n+1\)位。。==)

好像第一问能用类似二进制拆分的方法O(64)做?https://blog.csdn.net/jr_mz/article/details/50351557 。不想看了。

//824kb	16ms
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
#define mod 1000000007
typedef long long LL;
const int N=66; int bit[N];
LL f[N][2];
bool vis[N][2];
struct Matrix
{
int a[2][2];
Matrix operator *(const Matrix &x)const
{
Matrix res;
for(int i=0; i<2; ++i)
for(int j=0; j<2; ++j)
{
LL tmp=1ll*a[i][0]*x.a[0][j]+1ll*a[i][1]*x.a[1][j];
res.a[i][j]=tmp%mod;
}
return res;
}
}; inline LL read()
{
LL now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
int FP(Matrix x,LL k)
{
Matrix t=x;
for(--k; k; k>>=1,x=x*x)
if(k&1) t=t*x;
return (t.a[0][0]+t.a[0][1])%mod;
return t.a[0][0];
}
LL DFS(int x,int lim,int las)
{
if(!x) return 1;
if(!lim && vis[x][las]) return f[x][las]; LL res=0; int up=lim?bit[x]:1;
res+=DFS(x-1,lim&&!up,0);
if(up&&!las) res+=DFS(x-1,lim&&up,1); if(!lim) vis[x][las]=1,f[x][las]=res;
return res;
}
LL Solve(LL n)
{
int cnt=0;
for(; n; bit[++cnt]=n&1, n>>=1);
return DFS(cnt,1,0)-1;
} int main()
{
Matrix mat;
mat.a[0][0]=mat.a[0][1]=mat.a[1][0]=1, mat.a[1][1]=0;
for(int T=read(); T--; )
{
LL n=read();
printf("%lld\n%d\n",Solve(n),FP(mat,n));
}
return 0;
}

BZOJ.3329.Xorequ(数位DP)的更多相关文章

  1. BZOJ 3329: Xorequ [数位DP 矩阵乘法]

    3329: Xorequ 题意:\(\le n \le 10^18\)和\(\le 2^n\)中满足\(x\oplus 3x = 2x\)的解的个数,第二问模1e9+7 \(x\oplus 2x = ...

  2. BZOJ 3329 Xorequ (数位DP、矩阵乘法)

    手动博客搬家: 本文发表于20181105 23:18:54, 原地址https://blog.csdn.net/suncongbo/article/details/83758728 题目链接 htt ...

  3. BZOJ 3329 - Xorequ - 数位DP, 矩乘

    Solution 发现 $x \ xor \  2x = 3x$ 仅当 $x$ 的二进制中没有相邻的 $1$ 对于第一个问题就可以进行数位DP 了. 但是对于第二个问题, 我们只能通过递推 打表 来算 ...

  4. BZOJ 3329: Xorequ(数位dp+递推)

    传送门 解题思路 可以把原式移项得\(x\)^\(2x\)=\(3x\),而\(x+2x=3x\),说明\(x\)二进制下不能有两个连续的\(1\).那么第一问就是一个简单的数位\(dp\),第二问考 ...

  5. BZOJ 3329 Xorequ 数字DP+矩阵乘法

    标题效果:特定n,乞讨[1,n]内[1,2^n]差多少x满足x^3x=2x x^3x=2x相当于x^2x = 3x 和3x=x+2x 和2x=x<<1 因此x满足条件IFFx&(x ...

  6. bzoj 3329: Xorequ【数位dp+矩阵乘法】

    注意第一问不取模!!! 因为a+b=a|b+a&b,a^b=a|b-a&b,所以a+b=a^b+2(a&b) x^3x==2x可根据异或的性质以转成x^2x==3x,根据上面的 ...

  7. BZOJ3329 Xorequ(数位DP)

    题目大意:x xor 2x=3x(与x xor 3x=2x等价)求满足等式且小于n的x的个数,与满足等式小于2n的数的个数. 因为异或是不进位的二进制加法,那么因为结果正好和加法相同,那么说明x在二进 ...

  8. [BZOJ 3329]Xorequ

    Description 题库链接 给出 \(n\) ,分别求 \(\leq n\) 和 \(\leq 2^n\) 的满足方程 \[x\oplus 3x=2x\] 的正整数解个数. \(1\leq n\ ...

  9. bzoj 3209 bzoj1799 数位dp

    3209: 花神的数论题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2267  Solved: 1040[Submit][Status][Disc ...

随机推荐

  1. opencv 图像深度(depth)

    原文地址:http://blog.csdn.net/dingfc/article/details/7457984 图像深度是指存储每个像素所用的位数,也用于量度图像的色彩分辨率.图像深度确定彩色图像的 ...

  2. Innodb ,MyISAM

    1. InnoDB不支持FULLTEXT类型的索引. 2. InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算 ...

  3. 使用命令行登陆数据库配置文件修改 解决ora12528

    下面是问题解决: ORA-12528: TNS:listener: all appropriate instances are blocking new connections 1:修改listene ...

  4. c++ 简单静态链表

    所有结点(结构体变量)都是在程序中定义的,不是临时开辟的,也不能用完后释放,这种链表称为静态链表.对各结点既可以通过上一个结点的next指针去访问,也可以直接通过结构体变量名s1, s2, s3去访问 ...

  5. 配置mysql5.5主从复制、半同步复制、主主复制

    mysql主服务器 192.168.8.40 mysql从服务器 192.168.8.41 全新配置过程(主和从数据库都没有数据): 主从复制主服务器设置: 1.改server-id      2.启 ...

  6. MariaDB:在Linux下修改编码

    参考网址:http://www.cnblogs.com/vingi/articles/4302330.html: # vi /etc/my.cnf [mysqld] init_connect='SET ...

  7. Mysql添加注释(comment)(转)

    在MySQL数据库中, 字段或列的注释是用属性comment来添加. 创建新表的脚本中, 可在字段定义脚本中添加comment属性来添加注释. 示例代码如下: create table test( i ...

  8. numpy 广播

    http://blog.csdn.net/hongxingabc/article/details/53149655 https://zhuanlan.zhihu.com/p/20878530

  9. java ServerSocket

    public Socket accept() //等待连接,该方法阻塞 public void close() //关闭服务器套接字 ServerSocket只连一次的程序 /* this is se ...

  10. Bootstrap表格中,thead固定,tbody有垂直滚动条

    1.html源码:这里的table是使用的vue写法,实际生成的表格和一个一个写的tr th td无异 <div class="panel-body no-padding"& ...