#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <queue>
#include <map>
#include <stack>
#include <list>
#include <vector>
#include <ctime>
#define LL __int64
#define eps 1e-8
#define pi acos(-1)
using namespace std;
string ans[310];
string go(int a,int b){
string cnt="";
int l=ans[a].length();
for (int i=l-1;i>=0;i--){
for (int j=ans[a][i]-'0'+1;j<=9;j++){
cnt="";
int s=j;
for (int k=0;k<i;k++){
s+=ans[a][k]-'0';
cnt+=ans[a][k];
}
cnt+=char(j+'0');
if (s+9*(l-1-i)>=b && s<=b){
int g=b;
for (int k=i+1;k<l;k++){
for (int t=0;t<=9;t++)
if (s+t+9*(l-k-1)>=g){
cnt+=char(t+'0');
g-=t;
break;
}
}
return cnt;
}
}
}
for (int i=l+1;;i++){
for (int j=1;j<=9;j++){
cnt="";
int s=j;
cnt=char(s+'0');
if (s+9*(i-1)>=b && s<=b){
int g=b;
for (int k=0;k<i-1;k++){
for (int t=0;t<=9;t++)
if (s+t+9*(i-k-2)>=g){
cnt+=char(t+'0');
g-=t;
break;
}
}
return cnt;
}
}
}
}
int main(){
int n,k;
scanf("%d",&n);
//memset(ans,0,sizeof(ans));
for (int i=1;i<=n;i++){
scanf("%d",&k);
ans[i]=go(i-1,k);
}
for (int i=1;i<=n;i++)
cout<<ans[i]<<endl;
return 0;
}[CF]Sums of Digits
最新推荐文章于 2025-08-10 16:02:33 发布
本文介绍了一种算法,用于根据给定的数字序列重建一个丢失的、严格递增的整数序列。该序列的每个元素的数字之和等于给定序列中的对应值。文章提供了完整的代码实现,帮助读者理解如何解决这一有趣的问题。
8353

被折叠的 条评论
为什么被折叠?



