题目链接

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. 实现开发板与ubuntu的共享--根文件系统NFS--Samba共享【sky原创】

    虚拟机要选择桥接,并且禁用有线和无线网卡,开启本地连接,本地连接属性要写如下:     ip地址是在连上板子后,windows   cmd  下  ipconfig得出的 板子的网线最好连接交换机或者 ...

  2. linux 下程序员专用搜索源码用来替代grep的软件ack(后来发现一个更快的: ag), 且有vim插件的

    发现一个比ack更快更好用的:  https://github.com/ggreer/the_silver_searcher   , 使用时命令为ag,它是基于ack的代码二次开发的,所有使用方法基本 ...

  3. 转载:configure生成的文件(1.5.3)《深入理解Nginx》(陶辉)

    原文:https://book.2cto.com/201304/19620.html 当configure执行成功时会生成objs目录,并在该目录下产生以下目录和文件:|---ngx_auto_hea ...

  4. 10-关于DOM的事件操作

    一.JavaScript的组成 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for语句等. DOM:文档对象 ...

  5. ubuntu系统下Python虚拟环境的安装和使用

    ubuntu系统下Python虚拟环境的安装和使用        前言:进行python项目开发的时候,由于不同的项目需要使用不同的资源包和相关的配置,因此创建多个python虚拟环境,在虚拟环境下开 ...

  6. vue系列之vue-resource

    vue-resource是Vue.js的一款插件,它可以通过XMLHttpRequest或JSONP发起请求并处理响应.也就是说,$.ajax能做的事情,vue-resource插件一样也能做到,而且 ...

  7. 使用navicat premium将数据库从Oracle迁移到SQL Server,或从Oracle迁移到MySQL

    有时候我们有迁移数据库的需求,例如从Oracle迁移到SQL Server,或者从MySQL迁移到Oracle. 很多江湖好汉一时不知如何手工操作,所幸的是Navicat提供了迁移的自动化操作界面. ...

  8. spring-boot 多线程

    //配置类 package test; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import ...

  9. ural1855 线段树区间更新+推公式维护一元二次式

    和威威猫系列故事差不多,都是根据条件推出公式 /* 操作c a b d:a到b道路上的所有边权值加d 操作e a b:问a到b中包含的道路的平均权值 区间平均值=所有可能路径权值/所有路径数, 而路径 ...

  10. Asp.NetWebForm的控件属性

    一:GridView: 1.绑定ID 的值:DataKeyNames="Id", 2.自动产生列的意思:AutoGenerateColumns 3.如何注册脚本:ClientScr ...