给定一个n,要求找出一个最短的字符串S,使得所有1到n的整数都是S的子序列。
比如n=10,那么S=”1234056789”的时候,是满足条件的。这个时候S的长度是10。
现在给出一个n,要求输出最短S的长度。
Input
第1行:给出一个整数n (1<=n<=1e10000)。
Output
输出最短S的长度
Input示例
10
Output示例
10
枚举前100项可以看出是一个贪心的思想 按照1234567890的顺序构造
然后就是根据字符串找公式
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <map>
#include <queue>
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 50;
char s[11000];
int main()
{
scanf("%s",s);
int len=strlen(s);
int ans=(len-1)*10;
int f=0;
for(int i=1;s[i];i++)
{
if(s[i]>s[0])
{
f=0;
break;
}
else if(s[i]==s[0]) continue;
else
{
f=1;
break;
}
}
cout<<ans+(s[0]-'0')-f<<endl;
return 0;
}