【bzoj3329】Xorequ 数位dp+矩阵乘法
题目描述
.jpg)
输入
第一行一个正整数,表示数据组数据 ,接下来T行
每行一个正整数N
输出
2*T行
第2*i-1行表示第i个数据中问题一的解,
第2*i行表示第i个数据中问题二的解,
样例输入
1
1
样例输出
1
2
题解
数位dp+矩阵乘法
$x\ xor\ 3x=2x$即$x\ xor\ 2x=3x$。而亦或的运算规则为“相同为0,不同为1”,也就是说当且仅当$a\ and\ b$不为0,即有共同的位是1时,$a\ xor\ b\neq a+b$。
所以如果$x$满足条件,则$x$与$2x$没有共同的某位为1,即要求$x$没有连续的两位为1。
那么就可以考虑dp。
设$f[i]$表示$i$位数(可能包含前导零)没有连续的两位为1的数的个数,那么$f[i]$的递推式为斐波那契数列$f[i]=f[i-1]+f[i-2]$,边界条件$f[0]=1,f[1]=2$。
第一问上一个数位dp即可。
第二问直接上矩阵乘法求斐波那契数列即可。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll mod = 1000000007;
struct data
{
ll v[2][2];
data() {memset(v , 0 , sizeof(v));}
data operator*(const data &a)const
{
data ans;
int i , j , k;
for(i = 0 ; i < 2 ; i ++ )
for(j = 0 ; j < 2 ; j ++ )
for(k = 0 ; k < 2 ; k ++ )
ans.v[i][j] = (ans.v[i][j] + v[i][k] * a.v[k][j]) % mod;
return ans;
}
}A , ANS;
ll f[65] , g[65];
data pow(data x , ll y)
{
data ans;
ans.v[0][0] = ans.v[1][1] = 1;
while(y)
{
if(y & 1) ans = ans * x;
x = x * x , y >>= 1;
}
return ans;
}
int getp(ll n)
{
int ans = 0;
while(n) n >>= 1 , ans ++ ;
return ans;
}
void init()
{
int i;
A.v[1][0] = A.v[0][1] = A.v[1][1] = 1;
f[0] = 1 , f[1] = 2;
for(i = 2 ; i <= 62 ; i ++ ) f[i] = f[i - 1] + f[i - 2];
}
ll calc(ll n , int len)
{
if(len <= 1) return n + 1;
else if(!(n & (1ll << (len - 1)))) return calc(n , len - 1);
else if(n & (1ll << (len - 2))) return f[len - 1] + calc((1ll << (len - 2)) - 1 , len - 1);
else return f[len - 1] + calc(n - (1ll << (len - 1)) , len - 1);
}
int main()
{
init();
int T;
scanf("%d" , &T);
while(T -- )
{
ll n;
scanf("%lld" , &n);
printf("%lld\n" , calc(n , getp(n)) - 1);
printf("%lld\n" , pow(A , n + 1).v[1][1]);
}
return 0;
}
【bzoj3329】Xorequ 数位dp+矩阵乘法的更多相关文章
- 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+矩阵乘法】
注意第一问不取模!!! 因为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,根据上面的 ...
- BZOJ3329 Xorequ(数位DP)
题目大意:x xor 2x=3x(与x xor 3x=2x等价)求满足等式且小于n的x的个数,与满足等式小于2n的数的个数. 因为异或是不进位的二进制加法,那么因为结果正好和加法相同,那么说明x在二进 ...
- 【BZOJ 3326】[Scoi2013]数数 数位dp+矩阵乘法优化
挺好的数位dp……先说一下我个人的做法:经过观察,发现这题按照以往的思路从后往前递增,不怎么好推,然后我就大胆猜想,从前往后推,发现很好推啊,维护四个变量,从开始位置到现在有了i个数 f[i]:所有数 ...
- 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 ...
- BZOJ3329 Xorequ[数位DP+递推矩阵快速幂]
数 位 D P 开 long long 首先第一问是转化. 于是就可以二进制下DP了. 第二问是递推,假设最后$n-1$个01位的填法设为$f[i-1]$(方案包括 ...
- 【bzoj2004】[Hnoi2010]Bus 公交线路 状压dp+矩阵乘法
题目描述 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距离均为1km. 作为公交车线路的规划者,小Z调查了市民的需求,决定按下述规则设计 ...
- BZOJ3329 Xorequ(数位dp+矩阵快速幂)
显然当x中没有相邻的1时该式成立,看起来这也是必要的. 于是对于第一问,数位dp即可.第二问写出dp式子后发现就是斐波拉契数列,矩阵快速幂即可. #include<iostream> #i ...
- BZOJ3329: Xorequ(二进制数位dp 矩阵快速幂)
题意 题目链接 Sol 挺套路的一道题 首先把式子移一下项 \(x \oplus 2x = 3x\) 有一件显然的事情:\(a \oplus b \leqslant c\) 又因为\(a \oplus ...
随机推荐
- 3218: 字符串字符统计—C语言
3218: 字符串字符统计—C语言 时间限制: 1 Sec 内存限制: 128 MB提交: 270 解决: 129[提交][状态][讨论版][命题人:smallgyy] 题目描述 编写一函数,由实 ...
- java基础——类加载与反射
第1章 类加载器 1.1 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. (1)加载 就是指将class文件读入内存,并为之创 ...
- 区块链工作 jd
https://www.lagou.com/jobs/4096098.html 技术咨询网站: https://mp.weixin.qq.com/s/hs37UZFGI3uR4qmQ7v346g## ...
- 【转】 bind1st bind2nd的使用
以前在使用stl的过程中发现bind1st和bind2nd这两个函数,当时不太理解什么意思,今天在网上查了一下相关资料发现竟然很简单,下面我就具体解释一下他们的用法. bind1st和bind2nd函 ...
- js判断是否是大小写,数字等方法
function isEmail(str){ var regu = "^(([0-9a-zA-Z]+)|([0-9a-zA-Z]+[_.0-9a-zA-Z-]*))@([a-zA-Z0-9- ...
- Linux监控二之cacti简单安装部署
目录 cacti简单部署 1 环境依赖包部署 1 1. cacti中文版0.8e搭建 2 2. cacti安装向导 url:http://192.168.200.243/ ...
- 一次完整的HTTP请求需要的7个步骤
HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: 1:建立TCP连接 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连 ...
- day23-python之日志 re模块
1.logging import logging #-----------------------------------logging.basicConfig logging.basicConfig ...
- 力扣题目汇总(丑数,重复N的元素,求众数)
丑数 1.题目描述 编写一个程序判断给定的数是否为丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例 1: 输入: 6 输出: true 解释: 6 = 2 × 3 示例 2: 输入: 8 ...
- 动态规划:最长上升子序列之基础(经典算法 n^2)
解题心得: 1.注意动态转移方程式,d[j]+1>d[i]>?d[i]=d[j]+1:d[i] 2.动态规划的基本思想:将大的问题化为小的,再逐步扩大得到答案,但是小问题的基本性质要和大的 ...