滴滴在线编程
题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
不会做>_<'',好像要用什么莫队算法
浙公网安备 33010602011771号