传送门

解题思路

  可以把原式移项得\(x\)^\(2x\)=\(3x\),而\(x+2x=3x\),说明\(x\)二进制下不能有两个连续的\(1\)。那么第一问就是一个简单的数位\(dp\),第二问考虑递推按位做,设\(f(i)\)表示最后一位为\(0\)的答案,\(g(i)\)表示最后一位为\(1\)的答案,那么\(f(i)=g(i-1)+f(i-1)\),\(g(i)=f(i-1)\),整理一下发现\(f(i)=f(i-1)+f(i-2)\),就是斐波那契的形式,直接矩乘即可。

代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=70;
  4. const int MOD=1e9+7;
  5. typedef long long LL;
  6. int a[N],len;
  7. LL f[N][2][2],n;
  8. bool vis[N][2][2];
  9. LL DFS(int x,int lst,int lim){
  10. if(vis[x][lst][lim]) return f[x][lst][lim];
  11. vis[x][lst][lim]=1;
  12. if(!x) return f[x][lst][lim]=1;
  13. if(!lst && (lim || a[x])) f[x][lst][lim]=DFS(x-1,1,lim);
  14. f[x][lst][lim]+=DFS(x-1,0,lim|(a[x]==1));
  15. return f[x][lst][lim];
  16. }
  17. struct Matrix{
  18. int a[3][3];
  19. void clear(){
  20. memset(a,0,sizeof(a));
  21. }
  22. void init(){
  23. a[1][1]=a[2][2]=1;
  24. }
  25. friend Matrix operator*(const Matrix A,const Matrix B){
  26. Matrix ret; ret.clear();
  27. for(int i=1;i<=2;i++)
  28. for(int j=1;j<=2;j++)
  29. for(int k=1;k<=2;k++)
  30. (ret.a[i][j]+=1ll*A.a[i][k]*B.a[k][j]%MOD)%=MOD;
  31. return ret;
  32. }
  33. }mat,ans;
  34. Matrix fast_pow(Matrix x,LL y){
  35. Matrix ret; ret.clear(); ret.init();
  36. for(;y;y>>=1){
  37. if(y&1) ret=ret*x;
  38. x=x*x;
  39. }
  40. return ret;
  41. }
  42. int main(){
  43. int T; scanf("%d",&T);
  44. while(T--){
  45. memset(vis,false,sizeof(vis));
  46. memset(f,0,sizeof(f));
  47. scanf("%lld",&n); LL nn=n;
  48. len=0;
  49. while(n) a[++len]=(n&1),n>>=1;
  50. printf("%lld\n",DFS(len,0,0)-1);
  51. // cerr<<"!!!"<<endl;
  52. if(nn==1) puts("2");
  53. else if(nn==2) puts("3");
  54. else {
  55. // cerr<<"!!!"<<endl;
  56. ans.clear(); mat.clear();
  57. ans.a[1][1]=2; ans.a[1][2]=3;
  58. mat.a[1][2]=mat.a[2][2]=mat.a[2][1]=1;
  59. ans=ans*fast_pow(mat,nn-2);
  60. printf("%d\n",ans.a[1][2]);
  61. }
  62. }
  63. return 0;
  64. }

BZOJ 3329: Xorequ(数位dp+递推)的更多相关文章

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

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

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

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

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

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

  4. BZOJ3329 Xorequ[数位DP+递推矩阵快速幂]

    数    位    D    P    开    long    long 首先第一问是转化. 于是就可以二进制下DP了. 第二问是递推,假设最后$n-1$个01位的填法设为$f[i-1]$(方案包括 ...

  5. 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 ...

  6. hdu2089(数位DP 递推形式)

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  7. 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 ...

  8. 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,根据上面的 ...

  9. hdu 2604 Queuing(dp递推)

    昨晚搞的第二道矩阵快速幂,一开始我还想直接套个矩阵上去(原谅哥模板题做多了),后来看清楚题意后觉得有点像之前做的数位dp的水题,于是就用数位dp的方法去分析,推了好一会总算推出它的递推关系式了(还是菜 ...

随机推荐

  1. 20191110 Spring Boot官方文档学习(3)

    3.使用Spring Boot 3.1.构建系统 建议选择Maven或Gradle作为构建工具 每个Spring Boot版本都提供了它所支持的依赖关系的精选列表.实际上,您不需要为构建配置中的所有这 ...

  2. python 并发编程 多进程 目录

    python multiprocessing模块 介绍 python 开启进程两种方法 python 并发编程 查看进程的id pid与父进程id ppid python 并发编程 多进程 Proce ...

  3. Linear Discriminant Analysis

    Suppose that we model each class density as multivariate Gaussian, in practice we do not know the pa ...

  4. [LeetCode] 82. 删除排序链表中的重复元素 II

    题目链接 : https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/ 题目描述: 给定一个排序链表,删除所有含有 ...

  5. 搜索专题: HDU1312Red and Black

    Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  6. HDU1688-POJ3463-Sightseeing(求次短路的条数)

    题意 求出最短路和次短路的条数,当次短路比最短路长度小1时,输出条数之和,反之输出最短路条数. 题解  dis1[],cnt1[],dis2[],cnt2[] 分别表示最短路的长度和条数,次短路的长度 ...

  7. http协议是无状态协议,它的无状态指的是什么,如何解决这种情况

    http是无状态的协议,也是不安全的协议, 它的无状态是指对于事务处理没有记忆能力,缺少状态意味着后续的操作需要前面的信息. 解决办法:1,通过cookie解决,2,通过session会话保存.

  8. C# 同比缩放图片

    /** * 无损缩放图片 * bitmap 需要缩放的图片 * w 需要缩放的宽度 * h 需要缩放的高度 * */ public static System.Drawing.Bitmap TBSca ...

  9. Apache 的 bin 目录文件详解

    [root@Apache bin]# tree ├── ab    #Apache 性能测试工具 ├── apachectl    #Apache 启动命令,它是一个脚本 ├── apr-1-conf ...

  10. 关于prepareStatement(String sql,int autoGeneratedKeys)的记录

    PreparedStatement prepareStatement(String sql,int autoGeneratedKeys) throws SQLException autoGenerat ...