[BZOJ 3329]Xorequ
Description
给出 \(n\) ,分别求 \(\leq n\) 和 \(\leq 2^n\) 的满足方程 \[x\oplus 3x=2x\] 的正整数解个数。
\(1\leq n\leq 10^{18}\)
Solution
显然满足 \(x\oplus 2x=3x\) 即要满足 \(x\&(x<<1)=0\) 。其含义就是数的二进制相邻的两位不能同为 \(1\) 。
考虑第一种情况,即 \(\leq n\) 。容易发现其实可以数位 \(DP\) 。 \(f_{i,1/0}\) 为 \(i\) 位二进制的最高位为 \(1/0\) 的满足条件的非负整数的个数。
\[\begin{aligned}f_{i,0}&=f_{i-1,1}+f_{i-1,0}\\f_{i,1}&=f_{i-1,0}\end{aligned}\]
然后按位计算即可。
对于 \(\leq 2^n\) 的情况,容易发现其对具体的某一位是没有约束的,直接用矩阵加速上述转移方程即可。
Code
#include <bits/stdc++.h>
using namespace std;
const int yzh = 1e9+7;
long long f[100][2], n;
int t;
struct mat {
int a[2][2];
mat () {a[0][0] = a[0][1] = a[1][0] = a[1][1] = 0; }
mat operator * (const mat &b) const {
mat ans;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
for (int k = 0; k < 2; k++)
(ans.a[i][j] += 1ll*a[i][k]*b.a[k][j]%yzh) %= yzh;
return ans;
}
}S, T;
mat quick_pow(mat S, mat T, long long t) {
while (t) {
if (t&1) S = S*T;
t >>= 1, T = T*T;
}
return S;
}
void pre() {
f[0][0] = f[0][1] = 1;
for (int i = 1; i <= 90; i++)
f[i][0] = f[i-1][0]+f[i-1][1], f[i][1] = f[i-1][0];
}
long long get_ans1(long long x) {
int a[100], tot = -1; long long ans = 0;
while (x) a[++tot] = x%2, x /= 2; a[tot+1] = 0;
for (int i = tot; i >= 0; i--) {
if (a[i] == 1) ans += f[i][0];
if (a[i] == 1 && a[i+1] == 1) break;
if (i == 0) ++ans;
}
return ans-1;
}
int get_ans2(long long x) {
S.a[0][0] = S.a[0][1] = 1;
T.a[0][0] = T.a[1][0] = T.a[0][1] = 1; T.a[1][1] = 0;
S = quick_pow(S, T, x-1);
return S.a[0][0]+S.a[0][1];
}
void work() {
pre(); scanf("%d", &t);
while (t--) {
scanf("%lld", &n);
printf("%lld\n%d\n", get_ans1(n), get_ans2(n)%yzh);
}
}
int main() {work(); return 0; }
[BZOJ 3329]Xorequ的更多相关文章
- BZOJ 3329: Xorequ [数位DP 矩阵乘法]
3329: Xorequ 题意:\(\le n \le 10^18\)和\(\le 2^n\)中满足\(x\oplus 3x = 2x\)的解的个数,第二问模1e9+7 \(x\oplus 2x = ...
- BZOJ 3329 Xorequ (数位DP、矩阵乘法)
手动博客搬家: 本文发表于20181105 23:18:54, 原地址https://blog.csdn.net/suncongbo/article/details/83758728 题目链接 htt ...
- 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 ...
- BZOJ 3329 - Xorequ - 数位DP, 矩乘
Solution 发现 $x \ xor \ 2x = 3x$ 仅当 $x$ 的二进制中没有相邻的 $1$ 对于第一个问题就可以进行数位DP 了. 但是对于第二个问题, 我们只能通过递推 打表 来算 ...
- BZOJ 3329 Xorequ:数位dp + 矩阵快速幂
传送门 题意 现有如下方程:$ x \oplus 3x = 2x $ 其中 $ \oplus $ 表示按位异或. 共 $ T $ 组数据,每组数据给定正整数 $ n $,任务如下: 求出小于等于 $ ...
- 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,根据上面的 ...
- 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 ...
- BZOJ 3329: Xorequ(数位dp+递推)
传送门 解题思路 可以把原式移项得\(x\)^\(2x\)=\(3x\),而\(x+2x=3x\),说明\(x\)二进制下不能有两个连续的\(1\).那么第一问就是一个简单的数位\(dp\),第二问考 ...
- 3329: Xorequ
3329: Xorequ https://www.lydsy.com/JudgeOnline/problem.php?id=3329 分析: 因为a+b = a^b + ((a&b)<& ...
随机推荐
- [日常] PKUWC 2018爆零记
吃枣药丸...先开个坑... day -1 上午周测...大翻车... 下午被查水表说明天必须啥啥啥...(当时我差点笑出声) 晚上领到笔记本一枚和一袋耗材(袜子) 然而班会开太晚回去没来得及收拾就晚 ...
- 如何查看与更改python的工作目录?
在编写<机器学习实战>第二章kNN代码时遇到问题,即在自己编写好模块后,使用ipython进行import时,出现以下错误: 可知若想找到该模块,需将工作目录改变到当前文件(模块py文件) ...
- python 实现cm批量上传
import requests import json import time import random url = 'http://cm.admin.xxxx.com/customer/aj_ad ...
- python 归并排序
def merge_sort(alist): if len(alist) <= 1: return alist # 二分分解 num = len(alist)/2 left = merge_so ...
- find命令之(-atime,-ctime,-mtime)
关于find命令,以拙见总结如下: >>>定义: find命令用来在指定目录下查找文件. 任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则fin ...
- 20170222==(MODBUS读取多个寄存器)
MODBUS读取多个寄存器(功能码04) 为了简单我这里只用4个寄存器,当让你也可以用125个寄存器,但是最多也只能用125个寄存器的.每个寄存器有上面的表知道为一个字的大小即2个字节或者叫16比特位 ...
- Mego(1) - NET中主流ORM框架性能对比
从刚刚开始接触ORM到现在已有超过八年时间,用过了不少ORM框架也了解了不少ORM框架,看过N种关于ORM框架的相关资料与评论,各种言论让人很难选择.在ORM的众多问题中最突出的问题是关于性能方面的问 ...
- SpringCloud的Config:ConfigServer注册到EurekaServer中,变成一个Eureka服务
一.概念与定义 1.将SpringCloud ConfigServer注册到 EurekaServer,以便ConfigClient以服务的方式引用ConfigServer 2.客户端不再引用 Con ...
- hadoop2.6.0实践:控制台入口url列表
hadoop web控制台页面的端口整理: 50070:hdfs文件管理 8088:ResourceManager 8042:NodeManager 19888:JobHistory(使用" ...
- Linux背景知识(1)RedHat和Centos
Redhat有收费的商业版和免费的开源版,商业版的业内称之为RHEL(Red Hat Enterprise Linux)系列, 而这个CentOS(Community ENTerprise Opera ...