BZOJ3329:Xorequ——题解
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——题解的更多相关文章
- BZOJ3329 Xorequ(数位dp+矩阵快速幂)
		
显然当x中没有相邻的1时该式成立,看起来这也是必要的. 于是对于第一问,数位dp即可.第二问写出dp式子后发现就是斐波拉契数列,矩阵快速幂即可. #include<iostream> #i ...
 - BZOJ3329 Xorequ(数位DP)
		
题目大意:x xor 2x=3x(与x xor 3x=2x等价)求满足等式且小于n的x的个数,与满足等式小于2n的数的个数. 因为异或是不进位的二进制加法,那么因为结果正好和加法相同,那么说明x在二进 ...
 - BZOJ3329 : Xorequ
		
第一问: 打表可得规律:当且仅当x&(x<<1)=0时才会是解,于是数位DP f[i][j][k]表示二进制中前i位,上一位是j,前i位是否等于n的方案数 第二问: 打表可得规律: ...
 - BZOJ3329: Xorequ(二进制数位dp 矩阵快速幂)
		
题意 题目链接 Sol 挺套路的一道题 首先把式子移一下项 \(x \oplus 2x = 3x\) 有一件显然的事情:\(a \oplus b \leqslant c\) 又因为\(a \oplus ...
 - BZOJ3329 Xorequ[数位DP+递推矩阵快速幂]
		
数 位 D P 开 long long 首先第一问是转化. 于是就可以二进制下DP了. 第二问是递推,假设最后$n-1$个01位的填法设为$f[i-1]$(方案包括 ...
 - [暑假的bzoj刷水记录]
		
(这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊 堆一起算了 隔一段更新一下. 7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...
 - 【bzoj3329】Xorequ  数位dp+矩阵乘法
		
题目描述 输入 第一行一个正整数,表示数据组数据 ,接下来T行每行一个正整数N 输出 2*T行第2*i-1行表示第i个数据中问题一的解, 第2*i行表示第i个数据中问题二的解, 样例输入 1 1 样例 ...
 - 【bzoj3329】Xorequ 矩阵快速幂
		
Description Input 第一行一个正整数,表示数据组数据 ,接下来T行 每行一个正整数N Output 2T行 第2i-1行表示第i个数据中问题一的解, 第2*i行表示第i个数据中问题二的 ...
 - Xorequ(BZOJ3329+数位DP+斐波那契数列)
		
题目链接 传送门 思路 由\(a\bigoplus b=c\rightarrow a=c\bigoplus b\)得原式可化为\(x\bigoplus 2x=3x\). 又异或是不进位加法,且\(2x ...
 
随机推荐
- memory引擎和innodb引擎速度对比
			
ysql> insert into innodb_test (name) select name from innodb_test; Query OK, rows affected ( min ...
 - 使用Python访问HDFS
			
最近接触到大数据,对于Skpark和Hadoop的料及都停留在第一次听到这个名词时去搜一把看看大概介绍免得跟不上时代的层次. 在实际读了点别人的代码,又自己写了一些之后,虽然谈不上理解加深,至少对于大 ...
 - 「日常训练&知识学习」树的直径(POJ-1849,Two)
			
题意 一个城市由节点和连接节点的街道组成,街道是双向的. 此刻大雪覆盖了这个城市,市长确定了一些街道要将它们清扫干净,这些街道保证所有的节点可以通过它们连通而且街道数目尽可能小. 现有两台相同的扫雪机 ...
 - Qt-QML-C++交互实现文件IO系统
			
QMl是没有自己的文件IO控制的,这里如果我们需要对文件进行读写操作,那么就需要去C++或者JS完成交互,交互方式有多种,由于我还没有掌握,这里就不介绍具体的交互方式了.这里就简单说明一下我的实现过程 ...
 - .net web api应用遇到的一些问题
			
1.调用webapi接口时,碰到一种情况: 通过webapi调用接口时,返回的json数据,死活转换不成对象,转换的对象一直为null: webapi端代码: [HttpGet] public str ...
 - OSS文件上传及OSS与ODPS之间数据连通
			
场景描述 有这样一种场景,用户在自建服务器上存有一定数量级的CSV格式业务数据,某一天用户了解到阿里云的OSS服务存储性价比高(嘿嘿,颜值高),于是想将CSV数据迁移到云上OSS中,并且 ...
 - 主题模型 LDA 入门
			
主题模型 LDA 入门(附 Python 代码) 一.主题模型 在文本挖掘领域,大量的数据都是非结构化的,很难从信息中直接获取相关和期望的信息,一种文本挖掘的方法:主题模型(Topic Model ...
 - Paper Reading - Show, Attend and Tell: Neural Image Caption Generation with Visual Attention ( ICML 2015 )
			
Link of the Paper: https://arxiv.org/pdf/1502.03044.pdf Main Points: Encoder-Decoder Framework: Enco ...
 - openstack如何整合vmare最佳方案
			
OpenStack中国社区编者按:通过多年的发展,VMWare在虚拟化市场处于领军地位,很多企业部署了VMWare虚拟化方案,随着OpenStack云计算平台的快速崛起,很多企业都面临一个问题:能否. ...
 - android课程第一节(TextView控件使用)
			
TextView控件使用 一.TextView基本使用(创建方式) 1.在程序中创建TextView对象 如下代码: @Override protected void onCreate(Bundle ...