http://www.lydsy.com/JudgeOnline/problem.php?id=3329

原式化为x^2x=3x,而且实际上异或就是不进位的加法。

那么我们又有x+2x=3x,所以在做加法的时候也没有(在二进制中)进位。

由此我们得到:x必须(在二进制下)没有相邻的1。

那么第一问我们可以采用数位dp,相信看这篇博客的你一定会了数位dp,不会的话设f[i][j][0/1]表示第i位放j数,且前i位比n的前i位小于等于/大于。

剩下的就去学数位dp吧。

第二问就相当于问符合条件的长度为n的01串个数,可以打表,也可以感性证明一下发现就是fib的第n+2项。

于是愉快的矩阵乘法。

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll p=1e9+;
ll f[][][];
int q[];
ll dp(ll x){
int len=;
while(x)q[++len]=x%,x/=;
if(len==)q[++len]=;
memset(f,,sizeof(f));
for(int i=;i<=;i++){
if(i<=q[])f[][i][]=;
else f[][i][]=;
}
for(int i=;i<=len;i++){
for(int j=;j<=;j++){
for(int k=;k<=;k++){
if(j+k!=){
if(j<q[i])
f[i][j][]+=f[i-][k][]+f[i-][k][];
else if(j==q[i])
f[i][j][]+=f[i-][k][],f[i][j][]+=f[i-][k][];
else f[i][j][]+=f[i-][k][]+f[i-][k][];
}
}
}
}
ll ans=f[len][][];
for(int i=len-;i;i--)ans+=f[i][][]+f[i][][];
return ans;
}
struct node{
ll g[][];
};
void buildI(node &a){
for(int i=;i<;i++){
for(int j=;j<;j++){
a.g[i][j]=(i==j);
}
}
}
void multi(node x,node y,node &z){
memset(z.g,,sizeof(z.g));
for(int i=;i<;i++){
for(int j=;j<;j++){
if(x.g[i][j]){
for(int l=;l<;l++){
z.g[i][l]+=x.g[i][j]%p*y.g[j][l]%p;
z.g[i][l]%=p;
}
}
}
}
return;
}
node a,b;
void qpow(ll k){
buildI(a);
while(k){
if(k&)multi(a,b,a);
multi(b,b,b);
k>>=;
}
return;
}
ll solve(ll n){
b.g[][]=;b.g[][]=;
b.g[][]=;b.g[][]=;
qpow(n+);
return a.g[][]%p;
}
ll t,n;
int main(){
scanf("%lld",&t);
while(t--){
scanf("%lld",&n);
printf("%lld\n%lld\n",dp(n),solve(n));
}
return ;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

BZOJ3329:Xorequ——题解的更多相关文章

  1. BZOJ3329 Xorequ(数位dp+矩阵快速幂)

    显然当x中没有相邻的1时该式成立,看起来这也是必要的. 于是对于第一问,数位dp即可.第二问写出dp式子后发现就是斐波拉契数列,矩阵快速幂即可. #include<iostream> #i ...

  2. BZOJ3329 Xorequ(数位DP)

    题目大意:x xor 2x=3x(与x xor 3x=2x等价)求满足等式且小于n的x的个数,与满足等式小于2n的数的个数. 因为异或是不进位的二进制加法,那么因为结果正好和加法相同,那么说明x在二进 ...

  3. BZOJ3329 : Xorequ

    第一问: 打表可得规律:当且仅当x&(x<<1)=0时才会是解,于是数位DP f[i][j][k]表示二进制中前i位,上一位是j,前i位是否等于n的方案数 第二问: 打表可得规律: ...

  4. BZOJ3329: Xorequ(二进制数位dp 矩阵快速幂)

    题意 题目链接 Sol 挺套路的一道题 首先把式子移一下项 \(x \oplus 2x = 3x\) 有一件显然的事情:\(a \oplus b \leqslant c\) 又因为\(a \oplus ...

  5. BZOJ3329 Xorequ[数位DP+递推矩阵快速幂]

    数    位    D    P    开    long    long 首先第一问是转化. 于是就可以二进制下DP了. 第二问是递推,假设最后$n-1$个01位的填法设为$f[i-1]$(方案包括 ...

  6. [暑假的bzoj刷水记录]

    (这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...

  7. 【bzoj3329】Xorequ 数位dp+矩阵乘法

    题目描述 输入 第一行一个正整数,表示数据组数据 ,接下来T行每行一个正整数N 输出 2*T行第2*i-1行表示第i个数据中问题一的解, 第2*i行表示第i个数据中问题二的解, 样例输入 1 1 样例 ...

  8. 【bzoj3329】Xorequ 矩阵快速幂

    Description Input 第一行一个正整数,表示数据组数据 ,接下来T行 每行一个正整数N Output 2T行 第2i-1行表示第i个数据中问题一的解, 第2*i行表示第i个数据中问题二的 ...

  9. Xorequ(BZOJ3329+数位DP+斐波那契数列)

    题目链接 传送门 思路 由\(a\bigoplus b=c\rightarrow a=c\bigoplus b\)得原式可化为\(x\bigoplus 2x=3x\). 又异或是不进位加法,且\(2x ...

随机推荐

  1. 新版本Eclipse安装后插件都在哪里?

    201903版本的Eclipse,选择win安装,下载后的安装包大小只有48.7Mb, 双击安装会会弹出类似eclipse网页,选择需要安装的类型,一般选择Java EE版本 选择好版本后,选择安装目 ...

  2. unity share current game screen

    using UnityEngine; using System.Collections; using UnityEngine.UI; using System.IO; public class Tak ...

  3. Qt-网络与通信-TCP版本聊天程序

    代码在公司,考不出来,智能用书里自带的例子来写了. 不过这个TCP版本的程序并没有出来书上的效果,具体问题出在哪里还没有找到,运行书里自带的代码也是这样. 另外发现一个问题 Qt5.8.0VS版本对中 ...

  4. JavaScript实现无刷新评论及在IE下的剪切板访问(学习)

    1.无刷新评论 tips: appendChild:将新元素作为父元素的最后一个子元素进行添加. insertBefore:在一个指定的子节点之前插入一个节点 实现: <!DOCTYPE htm ...

  5. leetcode-组合总数III(回溯)

    组合总和 III 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: 所有数字都是正整数. 解集不能包含重复的组合.  示例 ...

  6. leetcode合并区间

    合并区间     给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: ...

  7. 深入理解java虚拟机学习笔记(一)

    第二章 Java内存区域与内存溢出异常 运行时数据区域 程序计数器(Program Counter Register) 程序计数器:当前线程所执行的字节码行号指示器.各条线程之间计数器互不影响,独立存 ...

  8. 【Coursera-ML-Notes】线性回归(下)

    模型表示 多变量的线性回归也叫做"多元线性回归".首先还是先明确几个符号的含义. \(x{^{(i)}_j}\):第i个训练样本的第j个特征,比如面积,楼层,客厅数 \(x^{(i ...

  9. 关于TensorFlow的GPU设置

    摘自:https://blog.csdn.net/byron123456sfsfsfa/article/details/79811286 1.  在使用GPU版的TensorFlow跑程序的时候,如果 ...

  10. UVa 1225 - Digit Counting - ACM/ICPC Danang 2007 解题报告 - C语言

    1.题目大意 把前n$(n\le 10000)$个整数顺次写在一起:12345678910111213……计算0~9各出现了多少次. 2.思路 第一想法是打表,然而觉得稍微有点暴力.不过暂时没有想到更 ...