zoukankan      html  css  js  c++  java
  • Ugly Numbers

    Ugly Numbers poj-1338

        题目大意:让你求这个序列的第n个数。这个数列满足:每一个数的因子只有2,3,5,而且第一项是一,且逐个递增。

        注释:n<=1500

          想法:开始的想法很简单,也很容易想到,就是弄一个队列,这个队列里面每一个数对于答案都是有贡献的,换句话说队列中的任意一个数queue[i],queue[i]*(2,3,5)对于答案来讲都有可能直接更新,这样的话,维护队列的头指针和尾指针,或者直接上STL。

            而还有一种想法就是维护三个指针(汗~),t2,t3,t5,分别表示乘上2,3,5所恰好能更新答案的位置,即:ugly[ti]*i>x[松弛变量],且ugly[ti-1]*i<=x[松弛变量]。这样的话,题目就变的简单,一道挺水的模拟... ...想不到别的分类了。

        最后,附上丑陋的代码... ...

     1 #include <iostream>
     2 #include <cstdio>
     3 using namespace std;
     4 int ugly[2000]; 
     5 int main()
     6 {
     7     ugly[1]=1;
     8     ugly[2]=2;
     9     int t5,t2,t3;
    10     t5=t3=1;
    11     t2=2;
    12     for(int i=3;i<=1500;i++)
    13     {
    14         ugly[i]=min(min(ugly[t2]*2,ugly[t3]*3),ugly[t5]*5);
    15         if(ugly[t2]*2==ugly[i]) t2++;
    16         if(ugly[t3]*3==ugly[i]) t3++;
    17         if(ugly[t5]*5==ugly[i]) t5++;
    18     }
    19     int n;
    20     while(1)
    21     {
    22         scanf("%d",&n);
    23         if(!n) return 0;
    24         printf("%d
    ",ugly[n]);
    25     }
    26 }

        小结:其实预处理是后写的,开始写到里面了,预处理显然要更快一点,时间复杂度O(n)。

  • 相关阅读:
    点击空白处回收键盘
    数据处理文件读取---预习 1.30
    界面通信之属性传值、代理传值
    UITableView的添加、删除、移动操作
    加载plist文件数据的方法
    UITableViewCell的重用机制
    自定义cell自适应高度
    关于Xcode7更新之后使用 SDWebImage 图片加载不出来
    简述frame、bounds、center
    layoutSubviews方法需要被调用的情况有哪些
  • 原文地址:https://www.cnblogs.com/ShuraK/p/8424337.html
Copyright © 2011-2022 走看看