1081. 度的数量

题目链接

1081. 度的数量

求给定区间 [X,Y] 中满足下列条件的整数个数:这个数恰好等于 K 个互不相等的 B 的整数次幂之和。

例如,设 X=15,Y=20,K=2,B=2,则有且仅有下列三个数满足题意:

17=24+20
18=24+21
20=24+22

输入格式

第一行包含两个整数 XY,接下来两行包含整数 KB

输出格式

只包含一个整数,表示满足条件的数的个数。

数据范围

1XY2311,
1K20,
2B10

输入样例:

15 20 2 2

输出样例:

3

解题思路

数位dp

显然,本题可以转化为前缀和计算贡献,即问题等价于计算 0x 中满足条件的整数个数,不妨先将 xB 进制数表示出来,从最高位开始枚举位数 i,由于受条件限制,每一位只能取或不取,如果当前最高位 i 大于 1,则说明这 i 位数可以任取,即贡献为 Cik,否则如果这位为 1,则有两种选择:取这位或不取这位,记录前面已经取走 lst1,如果当前这位不取,则后面的数可以任取,贡献为 Ci1klst,注意,如果 k==lst,说明此时已经全部取走,后面都不能再取了,此时也算作一种方案

  • 时间复杂度:O(302+logw)

代码

// Problem: 度的数量 // Contest: AcWing // URL: https://www.acwing.com/problem/content/1083/ // Memory Limit: 64 MB // Time Limit: 1000 ms // // Powered by CP Editor (https://cpeditor.org) // %%%Skyqwq #include <bits/stdc++.h> // #define int long long #define help {cin.tie(NULL); cout.tie(NULL);} #define pb push_back #define fi first #define se second #define mkp make_pair using namespace std; typedef long long LL; typedef pair<int, int> PII; typedef pair<LL, LL> PLL; template <typename T> bool chkMax(T &x, T y) { return (y > x) ? x = y, 1 : 0; } template <typename T> bool chkMin(T &x, T y) { return (y < x) ? x = y, 1 : 0; } template <typename T> void inline read(T &x) { int f = 1; x = 0; char s = getchar(); while (s < '0' || s > '9') { if (s == '-') f = -1; s = getchar(); } while (s <= '9' && s >= '0') x = x * 10 + (s ^ 48), s = getchar(); x *= f; } int x,y,k,b; int C[35][35]; int a[35],n; int get(int x,int y) { n=0; do { a[++n]=x%y; x/=y; }while(x); int res=0,lst=0; for(int i=n;i;i--) { if(a[i]>1) { if(k>lst) res+=C[i][k-lst]; break; } else if(a[i]) { if(k>lst) res+=C[i-1][k-lst]; lst++; } if(lst==k) { res++; break; } } return res; } void init() { for(int i=0;i<32;i++) for(int j=0;j<=i;j++) if(!j)C[i][j]=1; else C[i][j]=C[i-1][j-1]+C[i-1][j]; } int main() { scanf("%d%d%d%d",&x,&y,&k,&b); init(); printf("%d",get(y,b)-get(x-1,b)); return 0; }

__EOF__

本文作者acwing_zyy
本文链接https://www.cnblogs.com/zyyun/p/16962752.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   zyy2001  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

支付宝打赏