zoukankan      html  css  js  c++  java
  • UVA-1583 Digit Generator(线性模拟)

     

    一拿到这个题,先想到的模拟就是对于每一个数都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
    ",a[m]);
    20     }
    21     return 0;
    22 }
  • 相关阅读:
    吃甘蔗(中等,模拟)
    jquery对象里面的context参数
    event对象的使用注意事项
    EcmaScript源码
    对js运算符“||”和“&&”的总结
    浏览器滚动条样式
    浏览器的重绘与重排
    input[checkbox],input[radiobox]的一些问题
    height:100%
    Sublime Text 3 多行游标
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/13833282.html
Copyright © 2011-2022 走看看