Uva1583

博客围绕Digit Generator UVA - 1583展开,采用函数映射,即a[原来的数]=最小生成元。但在确定maxn范围时遇到问题,题目中原来的数范围是1 <= N <= 100,000,按此将最小生成元范围开到100,005却出现WA,作者寻求原因。

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

Digit Generator UVA - 1583

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <queue>
 4 #include <vector>
 5 #include<string.h>
 6 #include<map>
 7 #include<bits/stdc++.h>
 8 #define LL long long
 9 #define maxn 100100
10 using namespace std;
11 int n,ans,a[maxn];//a[原来的数]=最小生成元
12 //这里想一下,如果是a[最小生成元]=原来的数,那么在下面的输入原来的数找最小生成元的时候就需要遍历整个数组了,增加了没必要的复杂度
13 //我们的目标是o(1),通过输入一个数直接得到结果。
14 int main()
15 {
16     scanf("%d",&n);
17     for(int i=1;i<maxn;i++)
18     {//i是最小生成元,现在是知道最小生成元求原来的数
19         int x=i,y=i;//求出的y是原来的数
20         while(x)
21         {
22             y+=x%10;
23             x/=10;
24         }//a[y]=i;
25         if(a[y]==0||a[y]>i)
26             a[y]=i;
27     }
28     while(n--)
29     {
30         scanf("%d",&ans);
31         printf("%d\n",a[ans]);
32     }
33     return 0;
34 }

思路:

函数映射:a[原来的数]=最小生成元

注意点:

这里一定要注意maxn的范围,100005会WA。但是不知道为什么,题目给的原来的数的范围是1<=N<=100,000,而最小生成元一定比原来的数要小<=100,000,那么把最小生成元的范围开到100,005应该是足够了,但是WA了。不明白为什么,请大佬们指教了。

转载于:https://www.cnblogs.com/zuiaimiusi/p/10898636.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值