Description

题库链接

给出 \(n\) ,分别求 \(\leq n\) 和 \(\leq 2^n\) 的满足方程 \[x\oplus 3x=2x\] 的正整数解个数。

\(1\leq n\leq 10^{18}\)

Solution

显然满足 \(x\oplus 2x=3x\) 即要满足 \(x\&(x<<1)=0\) 。其含义就是数的二进制相邻的两位不能同为 \(1\) 。

考虑第一种情况,即 \(\leq n\) 。容易发现其实可以数位 \(DP\) 。 \(f_{i,1/0}\) 为 \(i\) 位二进制的最高位为 \(1/0\) 的满足条件的非负整数的个数。

\[\begin{aligned}f_{i,0}&=f_{i-1,1}+f_{i-1,0}\\f_{i,1}&=f_{i-1,0}\end{aligned}\]

然后按位计算即可。

对于 \(\leq 2^n\) 的情况,容易发现其对具体的某一位是没有约束的,直接用矩阵加速上述转移方程即可。

Code

#include <bits/stdc++.h>
using namespace std;
const int yzh = 1e9+7; long long f[100][2], n;
int t;
struct mat {
int a[2][2];
mat () {a[0][0] = a[0][1] = a[1][0] = a[1][1] = 0; }
mat operator * (const mat &b) const {
mat ans;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
for (int k = 0; k < 2; k++)
(ans.a[i][j] += 1ll*a[i][k]*b.a[k][j]%yzh) %= yzh;
return ans;
}
}S, T; mat quick_pow(mat S, mat T, long long t) {
while (t) {
if (t&1) S = S*T;
t >>= 1, T = T*T;
}
return S;
}
void pre() {
f[0][0] = f[0][1] = 1;
for (int i = 1; i <= 90; i++)
f[i][0] = f[i-1][0]+f[i-1][1], f[i][1] = f[i-1][0];
}
long long get_ans1(long long x) {
int a[100], tot = -1; long long ans = 0;
while (x) a[++tot] = x%2, x /= 2; a[tot+1] = 0;
for (int i = tot; i >= 0; i--) {
if (a[i] == 1) ans += f[i][0];
if (a[i] == 1 && a[i+1] == 1) break;
if (i == 0) ++ans;
}
return ans-1;
}
int get_ans2(long long x) {
S.a[0][0] = S.a[0][1] = 1;
T.a[0][0] = T.a[1][0] = T.a[0][1] = 1; T.a[1][1] = 0;
S = quick_pow(S, T, x-1);
return S.a[0][0]+S.a[0][1];
}
void work() {
pre(); scanf("%d", &t);
while (t--) {
scanf("%lld", &n);
printf("%lld\n%d\n", get_ans1(n), get_ans2(n)%yzh);
}
}
int main() {work(); return 0; }

最新文章

  1. sumoselect插件
  2. PL/SQL概念
  3. Codeforces Round #163 (Div. 2)
  4. functional cohesion
  5. 【leetcode】12. Integer to Roman
  6. 删除左右两边的空格trim
  7. 学习Emacs
  8. NTVS:把Visual Studio变成Node.js IDE 的工具
  9. python3 爬取百合网的女人们和男人们
  10. Error Correct System CodeForces - 527B
  11. FPGA设计千兆以太网MAC(3)——数据缓存及位宽转换模块设计与验证
  12. EOS智能合约授权限制和数据存储
  13. (转自知乎)Unicode编码
  14. 重新认识 Delphi
  15. gulp和grunt 分享ppt
  16. Delphi与各数据库数据类型比较
  17. python的Web框架:Django路由系统以及模板导入
  18. SQL Server 调优系列基础篇 - 并行运算总结(一)
  19. golang 中 sync包的 WaitGroup
  20. CCF CSP 201312-3 最大的矩形

热门文章

  1. Python+reuqests自动化接口测试
  2. 【Alpha版本】冲刺阶段 - Day2 - 漂流
  3. Bate敏捷冲刺每日报告--day2
  4. VS系列控制台闪退解决
  5. 微信公众号Markdown编辑器, 适合代码排版
  6. PHP处理上传文件
  7. c# BinaryWriter 和 BinaryReader
  8. JAVA中的Log4j
  9. cv2.cornerHarris()详解 python+OpenCV 中的 Harris 角点检测
  10. RxJava系列5(组合操作符)