博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3329 Xorequ(数位DP)
阅读量:5772 次
发布时间:2019-06-18

本文共 1685 字,大约阅读时间需要 5 分钟。

题目大意:x xor 2x=3x(与x xor 3x=2x等价)求满足等式且小于n的x的个数,与满足等式小于2n的数的个数。

因为异或是不进位的二进制加法,那么因为结果正好和加法相同,那么说明x在二进制上没有相邻的1。那么简单的数位DP就可以求出满足这个的答案了。
再看subtask2,根据打表找规律可得,这就是斐波那契数列的第n+2项(以首项是0来说)。那么只需要O(23lgn)的矩阵乘法就可以了。

代码:

#include
#include
#include
using namespace std;#define LL long long unsignedconst LL MOD = 1e9+7;LL dp[100][2], L, R, cnt;int n, a[100];LL DP(int i, int j, int f) { if(!i) return 1; if(!f && ~dp[i][j]) return dp[i][j]; LL ans = 0; int ed = f ? a[i] : 1; for(int k = 0; k <= ed; ++ k) if(!k||!j) ans += DP(i-1, k, f && k == ed); if(!f) dp[i][j] = ans; return ans;}LL solve(LL s, int len = 0) { for(; s; s >>= 1) a[++ len] = s & 1; return DP(len, 0, 1);}struct Mat { LL a[3][3]; } A, B;Mat Mul(Mat A, Mat B) { Mat C; for(int i = 0; i < 2; ++ i) for(int j = 0; j < 2; ++ j) C.a[i][j] = 0; for(int i = 0; i < 2; ++ i) for(int j = 0; j < 2; ++ j) for(int k = 0; k < 2; ++ k) C.a[i][j] = (C.a[i][j] + A.a[i][k] * B.a[k][j]) % MOD; return C;}Mat ksm(Mat A, LL k) { Mat C; for(int i = 0; i < 2; ++ i) for(int j = 0; j < 2; ++ j) C.a[i][j] = (i == j); for(; k; k >>= 1) { if(k & 1) C = Mul(C, A); A = Mul(A, A); } return C;}int main() { memset(dp, -1, sizeof dp); int T; scanf("%d", &T); while(T --) { scanf("%llu", &R); A.a[0][0] = A.a[0][1] = A.a[1][0] = 1; A.a[1][1] = 0; B.a[0][1] = 0; B.a[0][0] = 1; A = ksm(A, R+1); A = Mul(A, B); printf("%llu\n%llu\n", solve(R)-1, A.a[0][0]); }}

转载于:https://www.cnblogs.com/geng4512/p/5296865.html

你可能感兴趣的文章
如何通过解决精益问题提高敏捷团队生产力
查看>>
Apache下.htaccess文件配置及功能介绍
查看>>
Magento XML cheatsheet
查看>>
Egg 2.19.0 发布,阿里开源的企业级 Node.js 框架
查看>>
Kubernetes 弹性伸缩全场景解析 (四)- 让核心组件充满弹性 ...
查看>>
使用MySQLTuner-perl对MySQL进行优化
查看>>
Swoole 4.1.0 正式版发布,支持原生 Redis/PDO/MySQLi 协程化 ...
查看>>
开发网络视频直播系统需要注意的地方
查看>>
haproxy mysql实例配置
查看>>
强化学习的未来— 第一部分
查看>>
TableStore:用户画像数据的存储和查询利器
查看>>
2019 DockerCon 大会即将召开,快来制定您的专属议程吧!
查看>>
15分钟构建超低成本数据大屏:DataV + DLA
查看>>
MySQL 8.0 压缩包版安装方法
查看>>
@Transient注解输出空间位置属性
查看>>
Ansible-playbook 条件判断when、pause(学习笔记二十三)
查看>>
5种你未必知道的JavaScript和CSS交互的方法(转发)
查看>>
线程进程间通信机制
查看>>
galera mysql 多主复制启动顺序及命令
查看>>
JS prototype 属性
查看>>