滴滴在线编程

题1:

把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。
求按从小到大的顺序的第N个丑数。
分析:
丑数乘2,3,5还是丑数,由于第一个丑数是1,第二个丑数在12,13,1*5中较小的产生,用队列记录生成的丑数,每次取出最小的丑数,并生成新的丑数加到队尾。

#coding:utf-8
import sys
if __name__ == "__main__":
    index = int(sys.stdin.readline().strip())
    n, m = 0, 0
    k2, k3, k5 = [1], [1], [1]
    while n < index:
        m = min(k2[0], k3[0], k5[0])
        n += 1
        if m in k2:
            k2.remove(m)
        if m in k3:
            k3.remove(m)
        if m in k5:
            k5.remove(m)
        k2.append(m * 2)
        k3.append(m * 3)
        k5.append(m * 5)
    print m

题2:

已知一个数列,求最多有多少不重叠的非空区间,使得每个区间内数字的xor都等于0。
例如:
输入
4
3 0 2 2
输出:
2

不会做>_<'',好像要用什么莫队算法

posted @ 2017-09-10 17:40  机器狗mo  阅读(276)  评论(0)    收藏  举报