题意
思路
- 贪心:最大数为前面尽可能放9,最后剩下的不够9的放最后一位。最小数为后面尽可能放9,剩下的放前面,但如果有前导0,就给第一位加1,第一个非零位-1。这时发现,最小数其实就是最大数逆序然后改变前导0的结果
- 注意:三种特殊情况,第一种全放9也凑不够S,第二种s=0且m>1,第三种s=0且m=0,前两种输出-1,最后一种输出
0 0
AC代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
scanf("%d",&t);
while(t--){
int m,s,num[120]={0};
scanf("%d%d",&m,&s);
if((s==0&&m>1)||s>9*m){
printf("-1\n");
continue;
}
if(m==1&&s==0){
printf("0 0\n");
continue;
}
int i=0;
for(i=m-1;s>0;i--){
if(s>9){
num[i]=9;
s-=9;
}else{
num[i]=s;
s=0;
}
}
num[i+1]--;num[0]++;
for(int i=0;i<m;i++){
printf("%d",num[i]);
}
printf(" ");
num[i+1]++;num[0]--;
for(int i=m-1;i>=0;i--){
printf("%d",num[i]);
}
printf("\n");
}
}