题意:
1385 凑数字
给定一个n,要求找出一个最短的字符串S,使得所有1到n的整数都是S的子序列。
比如n=10,那么S=”1234056789”的时候,是满足条件的。这个时候S的长度是10。
现在给出一个n,要求输出最短S的长度。
输入
第1行:给出一个整数n (1<=n<=1e10000)。
输出
输出最短S的长度
输入样例
10
输出样例
10
思路:
首先我们扩展一下就可以知道
1 ~ 10可以表示为9 8 7 6 5 4 3 2 1 0
那么
11呢??
1 9 8 7 6 5 4 3 2 1 0(len = 11)
12呢??
2 1 9 8 7 6 5 4 3 2 1 0??(len = 12)
真的是这样吗??
我当时就是这样想的,当然想的太简单了!!
12:9 8 7 6 5 4 3 1 2 1 0 插入进去,len = 11这当然是更优的方案
代码实现:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5 + 5;
string s,tmp;
int main(){
cin >> s;
int len = s.length();
int num = (len - 1) * 10;
num = num + s[0] - '0';
int f = 0;
for(int i = 1;i < len;i++){
if(s[i] < s[0]){
f = 1;
break;
}
else if(s[i] == s[0]);
else if(s[i] > s[0]){
break;
}
}
if(f) num--;
printf("%d\n",num);
return 0;
}