腾讯马拉松的一个题,开始觉得比较难,后来强行模拟做的,还好吧。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int num[100]={4,3,3,5,4,4,3,5,5,4,3,6,6,8,8,7,7,9,8,8};
int a[100][100],cnt[100];
void Init()
{
num[20]=num[30]=num[80]=num[90]=6;
num[40]=num[50]=num[60]=5;
num[70]=7;
for(int i=20;i<=100;i++)
{
if(i%10==0)
continue;
num[i]=num[i-i%10]+num[i%10];
}
for(int i=0;i<100;i++)
a[num[i]][cnt[num[i]]++]=i;
a[9][cnt[9]++]=101;
a[9][cnt[9]++]=102;
a[9][cnt[9]++]=103;
a[9][cnt[9]++]=104;
for(int i=0;i<100;i++)
sort(a[i],a[i]+cnt[i]);
}
int main()
{
int T,cas=1;
Init();
scanf("%d",&T);
while(T--)
{
int n,m;
scanf("%d%d",&n,&m);
if(cnt[n]<m)
printf("Case #%d: -1\n",cas++);
else if(n==9&&m>22)
{
if(a[9][m-1]==101)
printf("Case #%d: 1",cas++);
else if(a[9][m-1]==102)
printf("Case #%d: 2",cas++);
else if(a[9][m-1]==103)
printf("Case #%d: 6",cas++);
else
printf("Case #%d: 10",cas++);
for(int i=0;i<100;i++)
printf("0");
printf("\n");
}
else
printf("Case #%d: %d\n",cas++,a[n][m-1]);
}
return 0;
}