题目大意:
  有一个函数f(n),满足3f(n)*f(2n+1)=f(2n)*(1+3f(n)),f(2n)<6f(n)。
  我们用g(t)表示f(i)%k=t的i的个数,其中1<=i<=n。
  问对于0<=x<k,所有的g(x)的异或和。

思路:
  将函数用递推式表示为:
  f(2n)=3f(n)
  f(2n+1)=f(2n)+1
  也就是说f(n)就是将n的二进制数串当作一个三进制数来算的值。
  接下来就是一个简单的数位DP。
  f[i][j]表示DP到第i位,前面那么多数所构成的三进制的值在模k意义下的值。

 #include<cstdio>
#include<cctype>
#include<cstring>
typedef long long int64;
inline int64 getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int64 x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int K=;
inline int log2(const float &x) {
return ((unsigned&)x>>&)-;
}
int64 f[][K];
inline int64 calc(const int64 &n,const int &k) {
int sum=;
const int len=log2(n);
memset(f[len&],,sizeof *f);
for(register int i=len;i>=;i--) {
memset(f[!(i&)],,sizeof *f);
const int cur=n>>i&;
sum=(sum*)%k;
for(register int j=;j<cur;j++) {
f[i&][(sum+j)%k]++;
}
sum=(sum+cur)%k;
for(register int j=;j<k;j++) {
f[!(i&)][j*%k]+=f[i&][j];
f[!(i&)][(j*+)%k]+=f[i&][j];
}
}
f[][]--;
f[][sum]++;
int64 ans=;
for(register int i=;i<k;i++) {
ans^=f[][i];
}
return ans;
}
int main() {
for(register int T=getint();T;T--) {
int64 n=getint();
int k=getint();
printf("%lld\n",calc(n,k));
}
return ;
}

最新文章

  1. 用NSAttributedString实现简单的图文混排
  2. android3D动画,绕y轴旋转
  3. BroadcastReceiver详解
  4. c# SendMail
  5. windows下实现微秒级的延时
  6. LaTeX Pdf to Word
  7. asp.net推送
  8. UIBezierPath和CAShapeLayer的关系
  9. swift 动态获取label宽度或高度
  10. [ios2][转]iOS摇动检测 (UIAccelerometer)
  11. 两天快速开发一个自己的微信小程序
  12. SpringCloud的应用发布(四)vmvare+linux,网关代理
  13. compose合并函数依次执行 - 来源redux
  14. Python列表,字典和字符串操作
  15. MongoDB系列:一、MongoDB和Redis区别
  16. ggplot
  17. 机器学习之高斯混合模型及EM算法
  18. Mac iTerm2登陆CentOS提示warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
  19. Linux-(ls,mv,mkdir,rm,cp)
  20. Scrollify – jQuery全屏滚动插件

热门文章

  1. URI设计原则
  2. Yii 1.1.17 一、安装、目录结构、视图、控制器、扩展自定义函数
  3. myeclipse安装插件phpeclipse后进行PHP代码编写
  4. HTML5API(2)
  5. C++中delete和delete[]的区别(转)
  6. CSS中cursor属性给标签加上小手形状
  7. textarea在浏览器中固定大小
  8. java程序中如何为一个while(true)循环计时,超过一定时间比如10个小时就退出循环?
  9. grunt 自定义任务实现js文件的混淆及加密
  10. 【PHPExcel实例】 php 导出 excel 实例