【题意】给定方程x^3x=2x,求<=x和<=2^x的满足方程的正整数个数。

【算法】数位DP,矩阵快速幂

【题解】异或相当于不进位加法。

移项得,x^2x=3x,又因为x+2x=3x,所以x+2x不能产生进位。

又2x=x<<1,所以x+(x<<1)不进位当且仅当x中不存在相邻的1。

问题转化为求<=x的二进制不存在相邻1的正整数个数,state记录前一位为0或1,进行简单的数位DP。(递推的话就表示最高位,然后从下一位对应转移)

第二个问题,设2^x的答案为f[x],最高位为x。若x位为0,则ans=f[x-1]。若x位为1,则x-1位为0,ans=f[x-2]。

所以,f[x]=f[x-1]+f[x-2],用矩阵快速幂求解斐波那契数列。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn=,MOD=1e9+;
ll f[maxn][maxn],n,ans[][],A[][],c[][];
int a[maxn];
ll dfs(int pos,int state,int limit){
if(pos==-)return ;
if(!limit&&~f[pos][state])return f[pos][state];
ll sum=dfs(pos-,,limit&&a[pos]==);
if((!limit||a[pos]==)&&state==)sum+=dfs(pos-,,limit);
if(!limit)f[pos][state]=sum;
return sum;
}
void mul(ll A[][],ll B[][]){
for(int i=;i<;i++)
for(int j=;j<;j++){
c[i][j]=;
for(int k=;k<;k++)
c[i][j]=(c[i][j]+B[i][k]*A[k][j])%MOD;
}
for(int i=;i<;i++)
for(int j=;j<;j++)
A[i][j]=c[i][j];
}
ll ask(ll x){
ans[][]=ans[][]=;ans[][]=ans[][]=;
A[][]=A[][]=A[][]=;A[][]=;
while(x){
if(x&)mul(ans,A);
mul(A,A);
x>>=;
}
return ans[][];
}
int main(){
int T;
scanf("%d",&T);
memset(f,-,sizeof(f));
while(T--){
scanf("%lld",&n);
ll num=n;//
int len=;
while(num){
a[len++]=num%;
num/=;
}
printf("%lld\n%lld\n",dfs(len-,,)-,ask(n));
}
return ;
}

注意long long。

【BZOJ】3329: Xorequ的更多相关文章

  1. 【BZOJ】3052: [wc2013]糖果公园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...

  2. 【BZOJ】3319: 黑白树

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...

  3. 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...

  4. 【BZOJ】1013: [JSOI2008]球形空间产生器sphere

    [BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...

  5. 【BZOJ】1002:轮状病毒(基尔霍夫矩阵【附公式推导】或打表)

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...

  6. 【BZOJ】【3083】遥远的国度

    树链剖分/dfs序 其实过了[BZOJ][4034][HAOI2015]T2以后就好搞了…… 链修改+子树查询+换根 其实静态树的换根直接树链剖分就可以搞了…… 因为其实只有一样变了:子树 如果roo ...

  7. 【BZOJ】【2434】【NOI2011】阿狸的打字机

    AC自动机+DFS序+BIT 好题啊……orz PoPoQQQ 大爷 一道相似的题目:[BZOJ][3172][TJOI2013]单词 那道题也是在fail树上数有多少个点,只不过这题是在x的fail ...

  8. 【BZOJ】【2738】&【Tsinsen】【A1333】矩阵乘法

    整体二分+树状数组 过了[BZOJ][2527][POI2011]Meteors以后这题就没那么难啦~ 关键是[从小到大]依次插入数字,然后整体二分每个查询的第k大是在第几次插入中被插入的……嗯大概就 ...

  9. 【BZOJ】【3170】【TJOI2103】松鼠聚会

    切比雪夫距离+曼哈顿距离 题解:http://www.cnblogs.com/zyfzyf/p/4105456.html 其实应该先做这题再做[BZOJ][3210]花神的浇花集会的吧…… 我们发现d ...

随机推荐

  1. 第二章 shell的语法

    变量:字符串.数字.环境和参数 获取变量内容可以在变量前使用$字符,使用echo指令可以将变量内容输出到终端. wuchao@wuchao-Lenovo:~$ var=hello wuchao@wuc ...

  2. python爬虫 赶集网

    #coding=utf-8import requestsfrom lxml import etreefrom sqlalchemy import create_enginefrom sqlalchem ...

  3. djano modles values+ajax实现无页面刷新更新数据

    做项目的过程中想通过不刷新页面的方式来进行页面数据刷新,开始使用http://www.cnblogs.com/ianduin/p/7761400.html方式将查询结果数据进行序列化.发现可以行,但是 ...

  4. linux解压zip

    用 unzip 的先安装 yum install -y unzip #unzip file.zip -d /root  -d指解压路径 ,不写的话默认当前目录

  5. 发生dev_queue_xmit的时候,全部都是从ip_finish_output中来的吗

    也就是说啊,内核中的收发包的路径,很可能是经理driver_recv --> tcp -->driver_send这样一个过程,是个很长的路径呢...... 从dev_queue_xmit ...

  6. WPF值转换实例

    WPF绑定功能非常方便,有时候点击某值时在另t一处显示此值的另一表现形式或调用其对应的其它值,用WPF值转换功能会很方便,下面就一LISTBOX和TEXTBLOCK控件,把LISTBOX中的值转换成除 ...

  7. (转) Parameter estimation for text analysis 暨LDA学习小结

    Reading Note : Parameter estimation for text analysis 暨LDA学习小结 原文:http://www.xperseverance.net/blogs ...

  8. CentOS 转义字符

    常用转义字符 反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串. 单引号(''):转义其中所有的变量为单纯的字符串. 双引号(""):保留其中的变量属性,不进行转义处理. 反引 ...

  9. Android 数据库升级中数据保持和导入已有数据库

    一.数据库升级: 在我们的程序中,或多或少都会涉及到数据库,使用数据库必定会涉及到数据库的升级,数据库升级带来的一些问题,如旧版本数据库的数据记录的保持,对新表的字段的添加等等一系列问题,还记得当我来 ...

  10. Android Intent Action 一览表

    String ADD_SHORTCUT_ACTION 动作:在系统中添加一个快捷方式.. "android.intent.action.ADD_SHORTCUT" String A ...