可惜没如果=_=
时光的河入海流

 

 

 

 

一拿到这个题,先想到的模拟就是对于每一个数都n从1到n枚举一遍然后去找,很显然这是铁TLE的。

我很会发现,这种算法,一个数会被操作很多遍(当遇到很多比它大的数的时候),而这个很多遍的重复会导致TLE。所以我们想着这些很多遍的操作如何能化简到1次。

一般按照题目思路,我们会对每一个n求他的合适的m,这需要枚举。那我们不妨换一个思路,反过来思考,枚举m,求m对应的n。这样就可将算法改进到线性。所以下次在遇到需要有很多重复的东西需要算的时候,可以枚举这个重复的东西,这样这个东西只要算一遍就行了qwq

 

 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 const int MAX=100005;
 4 int n,m,a[MAX];
 5 int main(){
 6     freopen ("digital.in","r",stdin);
 7     freopen ("digital.out","w",stdout);
 8     int i,j,x,y;
 9     memset(a,0,sizeof(a));
10     for (i=1;i<=1e5;i++){
11         x=y=i;
12         while (x){y+=x%10;x/=10;}
13         if (y<=1e5 && a[y]==0)
14             a[y]=i;
15     }
16     scanf("%d",&n);
17     for (i=1;i<=n;i++){
18         scanf("%d",&m);
19         printf("%d\n",a[m]);
20     }
21     return 0;
22 }

 

posted on 2020-10-18 01:17  珍珠鸟  阅读(98)  评论(0编辑  收藏  举报