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<<1)=0
故x的二进制拆分中随意两个1不相邻
令f[i]为i位数中最高位为0的满足条件的数的数量
g[i]为i位数中最高位为1的满足条件的数的数量
则显然有
f[i+1]=f[i]+g[i]
g[i+1]=f[i]
于是第一问数位DP 第二问矩阵乘法就可以
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MOD 1000000007
using namespace std;
typedef long long ll;
struct Matrix{ll xx[2][2];Matrix(ll _,ll __,ll ___,ll ____){xx[0][0]=_;xx[0][1]=__;xx[1][0]=___;xx[1][1]=____;}ll* operator [] (int x){return xx[x];}
};
ll f[70],g[70];
void operator *= (Matrix &x,Matrix &y)
{int i,j,k;Matrix z(0,0,0,0);for(i=0;i<2;i++)for(j=0;j<2;j++)for(k=0;k<2;k++)z[i][j]+=x[i][k]*y[k][j],z[i][j]%=MOD;x=z;
}
ll Digital_DP(ll x)
{int i,temp=0;long long re=0;for(i=0;1ll<<i<=x;i++);for(;i;i--){if( x&(1ll<<i-1) ){re+=f[i];if(temp) return re-1;temp=1;}elsetemp=0;}return re-1;
}
ll Matrix_Mutiplication(ll y)
{Matrix a(1,0,0,1),x(0,1,1,1);while(y){if(y&1) a*=x;x*=x;y>>=1;}return (a[0][1]+a[1][1])%MOD;
}
int main()
{int T,i;ll x;f[0]=1;for(i=1;i<=63;i++)f[i]=f[i-1]+g[i-1],g[i]=f[i-1];for(cin>>T;T;T--){scanf("%lld",&x);printf("%lld\n", Digital_DP(x+1) );printf("%lld\n", Matrix_Mutiplication(x) );}
}
版权声明:本文博客原创文章。博客,未经同意,不得转载。
BZOJ 3329 Xorequ 数字DP+矩阵乘法相关推荐
- bzoj 3329: Xorequ(DP+矩阵快速幂)
3329: Xorequ Time Limit: 1 Sec Memory Limit: 256 MB Submit: 1134 Solved: 491 [Submit][Status][Disc ...
- BZOJ 3329 Xorequ (数位DP、矩阵乘法)
BZOJ 3329 Xorequ (数位DP.矩阵乘法) 手动博客搬家: 本文发表于20181105 23:18:54, 原地址https://blog.csdn.net/suncongbo/arti ...
- 【bzoj3329】Xorequ 数位dp+矩阵乘法
题目描述 输入 第一行一个正整数,表示数据组数据 ,接下来T行 每行一个正整数N 输出 2*T行 第2*i-1行表示第i个数据中问题一的解, 第2*i行表示第i个数据中问题二的解, 样例输入 1 1 ...
- BZOJ 3329: Xorequ(数位dp+递推)
传送门 解题思路 可以把原式移项得\(x\)^\(2x\)=\(3x\),而\(x+2x=3x\),说明\(x\)二进制下不能有两个连续的\(1\).那么第一问就是一个简单的数位\(dp\),第二问考 ...
- 【BZOJ 3326】[Scoi2013]数数 数位dp+矩阵乘法优化
挺好的数位dp-- 先说一下我个人的做法: 经过观察,发现这题按照以往的思路从后往前递增,不怎么好推,然后我就大胆猜想,从前往后推,发现很好推啊,维护四个变量,从开始位置到现在有了i个数 f[i]:所 ...
- 51nod1836-战忽局的手段【期望dp,矩阵乘法】
正题 题目连接:http://www.51nod.com/Challenge/Problem.html#problemId=1836 题目大意 nnn个点mmm次随机选择一个点标记(可以重复),求最后 ...
- P3193-[HNOI2008]GT考试【KMP,dp,矩阵乘法】
正题 题目链接:https://www.luogu.com.cn/problem/P3193 题目大意 求有多少个长度为nnn的字符串不包含子串sss. 解题思路 考虑dpdpdp,用fi,jf_{i ...
- P5004-专心OI - 跳房子【dp,矩阵乘法】
正题 题目链接:https://www.luogu.org/problemnew/show/P5004 题目大意 把NNN个无色格子排成一行,可以把某些格子染成黑色,但两个黑色格子之间必须至少有MMM ...
- [BZOJ]4180: 字符串计数 SAM+矩阵乘法+二分
Description SD有一名神犇叫做Oxer,他觉得字符串的题目都太水了,于是便出了一道题来虐蒟蒻yts1999. 他给出了一个字符串T,字符串T中有且仅有4种字符 'A', 'B', 'C', ...
- 【BZOJ 2323】 2323: [ZJOI2011]细胞 (DP+矩阵乘法+快速幂*)
2323: [ZJOI2011]细胞 Description 2222年,人类在银河系外的某颗星球上发现了生命,并且携带了一个细胞回到了地球.经过反复研究,人类已经完全掌握了这类细胞的发展规律: 这种 ...
最新文章
- Java_Path_01_路径问题
- linux tar打包压缩排除某个目录或文件
- Java黑皮书课后题第6章:**6.26(回文素数)回文素数是指一个数同时为素数和回文数。编程程序,显示前100个回文素数,每行显示10个数,数字中间用一个空格隔开
- TypeScript里get属性的实现
- 458. 可怜的小猪
- [css] 用css3实现伪3D的文字效果
- 在线最小公倍数计算器
- 一分钟了解阿里云产品:安骑士
- 06-continue和break的区别
- 一个rsync自动备份并发信通知的shell脚本
- 软考论文-高项-进度管理、风险管理
- 数据中心监控软件 - ManageEngine OpManager
- 聚宽macd底背离_MACD背离技术分析(图解)
- Unity 3D游戏十一:坦克大战
- macbook清理磁盘空间
- 用支付宝和微信可以直接跳转拉起支付,API搭建比较方便第三方支付接口首选杉德比较靠谱,
- 用Python画等边三角形
- win10 系统更新服务器出错怎么办,解决更新win10系统出现错误提示“0x800f081f”的方法...
- 栅格化处理激光雷达点云数据
- 任意波形发生器的设计
热门文章
- 第0章 Oracle的安装及相关配置
- 用于主题检测的临时日志(861e8353-61d5-43a9-b1b4-e055dac9cf39 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)...
- 学习pytorch: 数据加载和处理
- 兼容M1芯片 Denise Audio poltergate Mac - 侧链均衡器
- Premiere Elements使用指南:键盘快捷键
- iOS底层探索之多线程(三)—初识GCD
- String 将GBK转UTF-8
- Web安全与Rational AppScan入门
- 一个流氓的SQL设计,备份(一个字段存多个数据)
- 学习U-Boot之--mkconfig