Files
python/TangDou/AcWing/ShuWei/1081_BruteForce.cpp
HuangHai 1f397eca87 'commit'
2025-08-30 18:35:01 +08:00

44 lines
1.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int l, r; // 数位DP的区间范围
int k, b; // k:个进制位为1,b进制
int a[N], al; // 用来分解b进制的数组
// 将x转化为b进制
void calc(int x, int b) {
al = 0;
memset(a, 0, sizeof a);
while (x) a[++al] = x % b, x /= b;
}
/*
通过了 7/14个数据
一半的分数也是OIer的梦想!
*/
int res;
int main() {
cin >> l >> r >> k >> b;
// 1、将[l,r]之间所有数字进行b进制分解
for (int i = l; i <= r; i++) {
calc(i, b);
int cnt = 0;
bool bad = false; // 是不是全是0或1,一旦是bad=true,表示出现了大于数字1的数位,此时,一票否决~!
// 2、检查是不是存在大于1的,大于1的是无效数字,跳过
for (int j = 1; j <= al; j++) {
if (a[j] > 1) {
bad = true;
break;
}
// 3、统计一下1出现的次数
if (a[j] == 1) cnt++;
}
// 4、判断出现的次数是不是等于k,如果是,那么找到了一个答案,计数
if (!bad && cnt == k) res++;
}
printf("%d\n", res);
return 0;
}