注意第一问不取模!!!

因为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],就是斐波那契数列,用矩阵乘法加速即可

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. const int mod=1e9+7;
  6. long long T,n,b[65],tot,x,ha[65][2];
  7. struct qwe
  8. {
  9. long long a[5][5];
  10. void clr()
  11. {
  12. a[1][1]=a[1][2]=a[2][1]=a[2][2]=0;
  13. }
  14. qwe operator * (const qwe &b) const
  15. {
  16. qwe c;
  17. for(int i=1;i<=2;i++)
  18. for(int j=1;j<=2;j++)
  19. {
  20. c.a[i][j]=0;
  21. for(int k=1;k<=2;k++)
  22. c.a[i][j]=(c.a[i][j]+a[i][k]*b.a[k][j])%mod;
  23. }
  24. return c;
  25. }
  26. }aa;
  27. long long dfs(int w,int lm,int la)
  28. {
  29. if(!w)
  30. return 1;
  31. if(!lm&&ha[w][la])
  32. return ha[w][la];
  33. if(lm)
  34. {
  35. if(b[w]==0||la==1)
  36. return dfs(w-1,b[w]==0,0);
  37. else
  38. return dfs(w-1,0,0)+dfs(w-1,1,1);
  39. }
  40. if(la==1)
  41. ha[w][la]=dfs(w-1,0,0);
  42. else
  43. ha[w][la]=dfs(w-1,0,0)+dfs(w-1,0,1);
  44. return ha[w][la];
  45. }
  46. int main()
  47. {
  48. scanf("%lld",&T);
  49. aa.a[1][2]=aa.a[2][1]=aa.a[2][2]=1;
  50. while(T--)
  51. {
  52. memset(b,0,sizeof(b));
  53. memset(ha,0,sizeof(ha));
  54. scanf("%lld",&n);
  55. tot=0;x=n;
  56. while(x)
  57. b[++tot]=x%2,x/=2;
  58. qwe r,a=aa;
  59. r.a[1][1]=r.a[2][2]=1,r.a[1][2]=r.a[2][1]=0;
  60. x=n+1;
  61. while(x)
  62. {
  63. if(x&1)
  64. r=r*a;
  65. a=a*a;
  66. x>>=1;
  67. }
  68. printf("%lld\n%lld\n",dfs(tot,1,0)-1,(r.a[1][1]+r.a[1][2])%mod);
  69. }
  70. return 0;
  71. }

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. Wannafly模拟赛2 C alliances(dfs序+二分)

    题目 https://www.nowcoder.com/acm/contest/4/C 题意 由n个点组成一个树,有m个帮派,每个帮派由一些个点组成,这些点以及它们两两路径上的所有点都属于该帮派的管辖 ...

  2. Java的finally语句在try或catch中的return语句执行之后还是之前?

    import java.util.HashMap; import java.util.Map; public class FinallyDemo1 { public static void main( ...

  3. 【APUE】vim常用命令

    转自:http://coolshell.cn/articles/5426.html 基本命令: i → Insert 模式,按 ESC 回到 Normal 模式. x → 删当前光标所在的一个字符. ...

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

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

  5. elasticsarch5.4集群安装

    越来越多的企业已经采用ELK解决方案来对其公司产生的日志进行分析,笔者最近着手在生产环境部署自己的ELK stack,本文介绍ELK中elasticsearch5.2集群的实现. 一.环境准备 1.系 ...

  6. 白话空间统计之四:P值和Z值(上):零如果

    本来今天想要讲讲软件操作的,后来发现好像还有好几个重要的指标没有说,干脆等所有说完在讲操作吧.否则操作出来的结果会发现大量的"不明觉厉". 首先是空间统计里面非常神奇的两个值:P值 ...

  7. leetcode ----Trie/stack专题

    一:Implement Trie (Prefix Tree) 题目: Implement a trie with insert, search, and startsWith methods. Not ...

  8. react-document-title

    根据不同的路由改变文档的title 使用该组件: import ReactDocumentTitle from 'path/ReactDocumentTitle' render() { return ...

  9. hdu5399Too Simple

    //给m个函数 //其相应是自变量x属于{1,2,...n} //f(x)属于{1,2...3} //给出当中一些函数,问有多少种不同的函数集合使得 //1<=i<=n f1(f2(f3. ...

  10. 多校训练hdu --Nice boat(线段树,都是泪)

    Nice boat Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total ...