题解:P13672 [GCPC 2023] German Conference for Public Counting
思路
当某个数包含相同的数字,此时需要多种这样的数字牌子。
例如:如果要表示出
也就是说,对于除了
此时,需要至少
具体统计方法
可以首先求出最大的
接下来,将这个数分别
注:每个数都包含
再分别将这些数从大到小与
找到这个
-
-
- 这个倒计时中还包含
\overline{100\cdots0} (c-1 个0 ),所以还额外需要(c-1) 个数字牌。
最后求出答案:
特判
如果
为了避免麻烦,可以直接算出来:当
代码
#include<bits/stdc++.h>
using namespace std;
// 求 b
int digit(int x){
int sum = 0;
while(x) x/=10, sum++;
return sum;
}
int main(){
int x; cin >> x;
int d = digit(x);
// 特殊处理
if(d == 1){
cout << x + 1;
return 0;
}
// 求最大的 11...1≤n
int base = 0;
for(int i=1; i<=d; i++)
base *= 10, base++;
// 直接相除得到对应的 a
int t = x / base;
// 答案 // b=c
int ans = t*d + (10-t)*(d-1);
cout << ans;
}