每日一题 | 两个序列归并问题

时间:2022-07-22
本文章向大家介绍每日一题 | 两个序列归并问题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

昨日问题

每日一题 | 这道因式分解问题你能想出解法吗?

这道题出自codeforces,链接:https://codeforces.com/gym/102646/problem/A1

这道题是一个简单的因子拆分问题,对于一个数x来说,我们需要先找到它所有的因子。然后枚举一下因子的组合情况就可以了,因为n的范围很小只有2000。对于2000以内的数而言,它的因子数量不会很多。

题目虽然要求的是找到三个因子i,j,k,但是对于确定的n而言,当i和j确定了,k也就确定了,所以只需要两重循环遍历一下就可以了。

所以这道题一共可以分成两个步骤,第一个步骤是对于x我们找到它所有的因子,其次我们用i和j两个变量遍历因子,再计算出k,计算一下满足条件的i,j和k的数量即可。由于n的范围比较小,我们基本上怎么玩都可以,只要不超过n方的复杂度都可以接受的。

import math


def factorization(n):
    factors = []
    # 获取因子只需要遍历到根号n即可
    for i in range(1, int(math.sqrt(n)) + 1):
        if n % i == 0:
            factors.append(i)
            if i != n // i:
                factors.append(n // i)

    cnt = 0
    for i in factors:
        for j in factors:
            if i * j > n or n % (i * j) != 0:
                continue
            k = n // (i * j)
            if i <= j <= k:
                cnt += 1

    return cnt


n = int(input())


for i in range(1, n+1):
    print(factorization(i))

今日问题

给定两个相同长度的序列A和B,我们要用A和B两个序列合并成新的序列C。每次我们从这两个序列其中一个头部拿走一个元素放入C末尾,直到A和B序列为空为止。

请问以这种方法得到的字典序最小的C。

样例

input

7
6 10 4 2 13 12 7
9 8 11 3 5 1 14

output

6 9 8 10 4 2 11 3 5 1 13 12 7 14