HDU-4541-Ten Googol

本文介绍了一道腾讯马拉松比赛中的编程题目,通过预处理和排序技巧实现了一个有效的解决方案。代码中使用了C++语言,对数字进行分解并预先计算出所有可能的组合,最后根据输入快速查找答案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

腾讯马拉松的一个题,开始觉得比较难,后来强行模拟做的,还好吧。

代码:

#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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值