注意第一问不取模!!!

因为a+b=a|b+a&b,ab=a|b-a&b,所以a+b=ab+2(a&b)

x3x==2x可根据异或的性质以转成x2x==3x,根据上面的推导,得到

x^2x=x+2x-2
(x&2x)3x;

3x-2*(x&2x)3x;

x&2x0;

x&(x<<1)0

也就是说x在二进制下不能有相邻的1

第一问用数位dp瞎搞一下就行

第二问,考虑递推,设f[i]为n==i的答案,已知f[n-1],f[n],求f[n+1],考虑在新增的位置上放0,那么剩下n个位置可以随便放,也就是f[n];在新增的位置上放1,那么n-1位一定要放0,剩下n-1个位置可以随便放,也就是f[n-1],所以f[n+1]=f[n]+f[n-1],就是斐波那契数列,用矩阵乘法加速即可

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int mod=1e9+7;
long long T,n,b[65],tot,x,ha[65][2];
struct qwe
{
long long a[5][5];
void clr()
{
a[1][1]=a[1][2]=a[2][1]=a[2][2]=0;
}
qwe operator * (const qwe &b) const
{
qwe c;
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
{
c.a[i][j]=0;
for(int k=1;k<=2;k++)
c.a[i][j]=(c.a[i][j]+a[i][k]*b.a[k][j])%mod;
}
return c;
}
}aa;
long long dfs(int w,int lm,int la)
{
if(!w)
return 1;
if(!lm&&ha[w][la])
return ha[w][la];
if(lm)
{
if(b[w]==0||la==1)
return dfs(w-1,b[w]==0,0);
else
return dfs(w-1,0,0)+dfs(w-1,1,1);
}
if(la==1)
ha[w][la]=dfs(w-1,0,0);
else
ha[w][la]=dfs(w-1,0,0)+dfs(w-1,0,1);
return ha[w][la];
}
int main()
{
scanf("%lld",&T);
aa.a[1][2]=aa.a[2][1]=aa.a[2][2]=1;
while(T--)
{
memset(b,0,sizeof(b));
memset(ha,0,sizeof(ha));
scanf("%lld",&n);
tot=0;x=n;
while(x)
b[++tot]=x%2,x/=2;
qwe r,a=aa;
r.a[1][1]=r.a[2][2]=1,r.a[1][2]=r.a[2][1]=0;
x=n+1;
while(x)
{
if(x&1)
r=r*a;
a=a*a;
x>>=1;
}
printf("%lld\n%lld\n",dfs(tot,1,0)-1,(r.a[1][1]+r.a[1][2])%mod);
}
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+矩阵乘法

    标题效果:特定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 ...

  3. 【bzoj3329】Xorequ 数位dp+矩阵乘法

    题目描述 输入 第一行一个正整数,表示数据组数据 ,接下来T行每行一个正整数N 输出 2*T行第2*i-1行表示第i个数据中问题一的解, 第2*i行表示第i个数据中问题二的解, 样例输入 1 1 样例 ...

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

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

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

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

  6. BZOJ.3329.Xorequ(数位DP)

    题目链接 x^3x=2x -> x^2x=3x 因为a^b+((a&b)<<1)=a+b,x^2x=x+2x,所以x和2x的二进制表示中不存在相邻的1. (或者,因为x+2x ...

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

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

  8. 【BZOJ 3326】[Scoi2013]数数 数位dp+矩阵乘法优化

    挺好的数位dp……先说一下我个人的做法:经过观察,发现这题按照以往的思路从后往前递增,不怎么好推,然后我就大胆猜想,从前往后推,发现很好推啊,维护四个变量,从开始位置到现在有了i个数 f[i]:所有数 ...

  9. 【bzoj2004】[Hnoi2010]Bus 公交线路 状压dp+矩阵乘法

    题目描述 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距离均为1km. 作为公交车线路的规划者,小Z调查了市民的需求,决定按下述规则设计 ...

随机推荐

  1. Thinkphp5学习 Windows下的安装

    方法一.通过官方网站直接下载: (1)下载地址:http://www.thinkphp.cn/down.html: (2)下载后,解压到web目录下: (3)访问:http://localhost/目 ...

  2. Object-C Xcode 编译提示 note: please rebuild precompiled header ZWYLPrefixHeader

    错误提示如下图 解决思路: 由于手欠不小心,在.pch文件上的第一行加了几个文字,删除以后,还有一个空行,估计是这个空行引起的.删除这个空行,就好了.

  3. PAT (Advanced Level) 1031. Hello World for U (20)

    简单题. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> ...

  4. Tell me the area---hdu1798 (数学 几何)

    http://acm.hdu.edu.cn/showproblem.php?pid=1798 给你两个圆求阴影部分的面积 求出两个扇形的面积减去四边形的面积 扇形的面积是度数(弧度制)*半径的平方 不 ...

  5. hdu 4971

    记忆花搜索   dp #include <cstdio> #include <cstdlib> #include <cmath> #include <set& ...

  6. Java连接MySQL报错:CommunicationsException: Communications link failure

    现象: 报错:Exception in thread "main" com.mysql.cj.jdbc.exceptions.CommunicationsException: Co ...

  7. Spring中使用存储过程

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/jdbc-framework-overview/sql-stored-procedure-in-sp ...

  8. C++设计模式之适配器模式(二)

    3.Socket网络通信的设计与实现------类适配器 除了对象适配器模式之外.适配器模式另一种形式.那就是类适配器模式,类适配器模式和对象适配器模式最大的差别在于适配器和适配者之间的关系不同,对象 ...

  9. 【转】nginx 和 php-fpm 通信使用unix socket还是TCP,及其配置

    原文: http://blog.csdn.net/pcyph/article/details/46513521 -------------------------------------------- ...

  10. curl的使用(from 阮一峰)

    1.   http://www.ruanyifeng.com/blog/2011/09/curl.html 2.   https://curl.haxx.se/docs/httpscripting.h ...