Description
谕神是集训队里面智商数一数二的大神,在他的电脑里储存着他在学习的东西。每天都要通过学习来提高自己的知识水平。然而,作为一个长者,谕神不愿意将自己的学习资料给那些too young, too simple, sometimes naive的人看,以免被他们看了去搞一个大新闻。于是,谕神给自己的电脑设置了密码。
当然,他设置的密码也要按照基本法。这个基本法是谕神自己搞出来的。法则是这样的:
1、密码由 个 位数组成,中间由空格隔开,其中,两个数的各个位的和均为
2、是满足1条件的最小的数和最大的数
3、当找不到
位数的和为s的时候,密码就是:-1 -1
。
4、谕神保证密码的 个数中没有前导 。
他这个密码只是为了防止too young, too simple, sometimes naive的人进入电脑的,对于你们这些高智商的人群,破译密码应该并不难吧~~
注意,单独的 ,是合法的哦~
Input
先读入一个 ( ),为数据组数
每组数据只有一行,为 ( )和 ( ).
Output
输出谕神的密码
Sample Input
1
2 15
Sample Output
69 96
Hint
就一组测试数据
位数各位和为
的最大值是
, 最小值是
解体思路:要注意几个细节
1.n==1&&s==0 输出0 0
2.n>1&&s==0 输出 -1 -1
3.s>n*9 输出-1 -1
其他结果只要模拟一边就出来了,先求最大值,最小值可以在最大值的基础上求得
代码如下:
#include<stdio.h>
int x[110];
int y[110];
int main(){
int t;
int n,s,i,j,k;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&s);
if(s==0&&n==1){
printf("0 0\n");
continue;
}
if(s==0&&n>1){
printf("-1 -1\n");
continue;
}
//不会出现前导0
if(s>n*9){//s大于n组合的最大值
printf("-1 -1\n");
continue;
}
if(s==n*9){
for(i=1;i<=2*n;i++){
printf("9");
if(i==n) printf(" ");
}
printf("\n");
continue;
}
//接下来有解
k=n;
//求最大值
for(i=1;i<=n;i++){
if(s==0){
x[i]=0;
y[k]=0;
k--;
continue;
}
for(j=9;j>=0;j--){
if(s-j>=0){
s-=j;
x[i]=j;
y[k]=j;
k--;
break;
}
}
}
if(y[1]==0){
y[1]=1;
for(i=2;i<=n;i++){
if(y[i]!=0){
y[i]-=1;
break;
}
}
}
for(i=1;i<=n;i++){
printf("%d",y[i]);
}
printf(" ");
for(i=1;i<=n;i++){
printf("%d",x[i]);
}
printf("\n");
}
return 0;
}