Amount of Degrees 度的数量
自己的写法
// Amount of Degrees 度的数量.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
* https://loj.ac/p/10163
* http://ybt.ssoier.cn:8088/problem_show.php?pid=1585
*
题目描述
原题来自:NEERC 2000 Central Subregional,题面详见 Ural 1057。
求给定区间 [X,Y] 中满足下列条件的整数个数:这个数恰好等于 K 个互不相等的 B 的整数次幂之和。
例如,设 X=15,Y=20,K=2,B=2,则有且仅有下列三个数满足题意:
17 = 2^4+2^0
18 = 2^4 + 2^1
20 = 2^4+2^2
输入格式
第一行包含两个整数 X 和 Y,接下来两行包含整数 K 和 B。
输出格式
只包含一个整数,表示满足条件的数的个数。
样例
输入
15 20
2
2
输出
3
对于全部数据,1<= X<= Y<= 2^31 - 1,1<= K<= 20,2<= B<= 10。
*/
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
int dp[35][35][2];
int K, B;
int dfs(const vector<int>& v, int len, int k, int limit) {
int& ret = dp[len][k][limit];
if (len == 0) {
if (limit == 1) {
if (v[len] >= 1)
return k == 0 || k == 1;
else if (v[len] == 0)
return k == 0;
}
else {
return k == 0 || k == 1;
}
}
if (ret != -1)
return ret;
ret = 0;
if (limit == 0 || v[len] > 1) {
ret += dfs(v, len - 1, k, 0);
ret += dfs(v, len - 1, k - 1, 0);
}
else if (limit == 1) {
if (v[len] == 0)
ret += dfs(v, len - 1, k, 1);
else if (v[len] == 1) {
ret += dfs(v, len - 1, k, 0);
ret += dfs(v, len - 1, k - 1, 1);
}
}
return ret;
}
int calc(int n) {
vector<int> v;
memset(dp, -1, sizeof dp);
while (n != 0) {
v.push_back(n % B);
n = n / B;
}
int ret = dfs(v, v.size() - 1, K, 1);
return ret;
}
int main() {
int x, y;
cin >> x >> y >> K >> B;
cout << calc(y) - calc(x - 1) << endl;
return 0;
}
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2020-07-12 LeetCode 174. 地下城游戏 dp
2018-07-12 go语言字符串练习