社区讨论
解释一下之前的算法,我不是暴力撸的,时间复杂度会小。
P1980[NOIP 2013 普及组] 计数问题参与者 5已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @mi86460r
- 此快照首次捕获于
- 2025/11/21 09:14 4 个月前
- 此快照最后确认于
- 2025/11/21 09:14 4 个月前
#include
using namespace std;
int main()
{
int x;
long long m,N = 0,n;
cin >> n >> x;
CPPif (x != 0)
{
if (n % 10 >= x)
N = N + n / 10 + 1;//个位
else
N = N + n / 10;
for (m = 10; m <= 1e8; m = m * 10)//以m来表示位数
{
if ((n % (m * 10)) / m >= x)//当m位大于等于x事
{
if ((n %(m * 10)) / m == x)//等于时
N = N +n/(m*10)*m+ n % m + 1;//n位以上的值乘以m并加上多余量
else
N = N + (n / (m * 10) + 1) * m;//n位以上值加一乘以m
}
else
N = N + n / (m * 10) * m;//n位以上乘以m
}
}
if (x == 0)//零的最大区别是每一位都要少算一次
{
if (n / 10 == 0)
N = 0;
for (m = 10; m <= 1e8; m = m * 10)
{
if (n % (m * 10) /m != 0 || n/m!=0)
{
if (n % m / (m / 10) != 0)
N = N + n / m * (m / 10);
else
N = N + (n / m - 1) * (m / 10) + n % (m / 10) + 1;
}
}
}
cout << N;
return 0;
}
回复
共 7 条回复,欢迎继续交流。
正在加载回复...