【题意】给定方程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. win7主题/默认账户图片路径

    账户图片位置 C:\ProgramData\Microsoft\User Account Pictures 主题位置 C:\Windows\Resources

  2. Oracle导数据到SQL server的方法总结

    通过oracle10g 访问sql server 2008 导数据步骤 最近在项目中遇到要将Oracle数据库的数据导入到SQL server数据库中,解决办法如下: 一.准备工作 配置Oracle ...

  3. Android基础------Intent组件

    1.什么是intent 同Activity一样,也是Android应用组件在Android中承担着一种指令输出的作用Intent负责对应用中一次操作的动作及动作相关的数据进行描述.Android则根据 ...

  4. change object keys & UpperCase & LowerCase

    change object keys & UpperCase & LowerCase .toLocaleUpperCase(); && .toLocaleLowerCa ...

  5. 在select中,载入时默认select为空白,选项内不显示空白项

    有两种办法,一种纯css实现,一种借助js实现. html: <body onload="load()"> <select id="abc" ...

  6. 域对象 pageContext request session servletContext

    pageContext 当前页面之内有效 request   当前的请求内有效 session 当前的会话内有效 servletContext 当前这次服务器生命周期内有效

  7. httpservlet在创建实例对象时候默认调用有参数的init方法 destroy()方法 service方法, 父类的init方法给子类实例一个config对象

  8. javascript中面向对象的5种写法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. [洛谷P3833][SHOI2012]魔法树

    题目大意:给一棵树,路径加,子树求和 题解:树剖 卡点:无 C++ Code: #include <cstdio> #include <iostream> #define ma ...

  10. BZOJ1036:[ZJOI2008]树的统计——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1036 题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来 ...