首先考虑
n=9999...999
这种情况,没法怎么节省,每位都有
10
种可能,只能
9876543210
重复位数次,总长度为
10∗len
。
所以对于一个一般的长度为
len
的
n
,至少需要
现在考虑最高位取非
0
的情况。注意到当最高位小于
然后可以发现,只需要知道最高位这个数后面是否能每位都出现,如果不能就不用加
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=100005;
int n,cnt[15],ans;
char st[maxn];
int main(){
freopen("51nod1385.in","r",stdin);
freopen("51nod1385.out","w",stdout);
scanf("%s",st+1); n=strlen(st+1); ans+=(n-1)*10;
for(int i=1;i<=st[1]-'0';i++){
int res=0,now=0;
for(int j=1;j<=n;j++){
res=max(res,now+(i<=st[j]-'0'-1)+n-j);
now+=(i<=st[j]-'0');
}
res=max(res,now);
if(res==n) ans++;
}
printf("%d\n",ans);
return 0;
}