Python-OD_赛马

题目:
给定两个只包含数字的数组A,B,调整数组A里面数字的顺序,使得尽可能多的 A[i] > B[i]。数组 A和B中的数字各不相同。输出所有可以达到最优结果Q的A数组的数量
输入描述:
输入的第一行是数组a中的数字,其中只包含数字,每两个数字之间相隔一个空格,a 数组大小不超过 10输入的第二行是数组b中的数字,其中只包含数字,每两个数字之间相隔一个空格,b数组大小不超过 10输出描述
输出所有可以达到最优结果的 A数组数量
示例1:
*输入:
13 8 20
9 12 7
输出:
说明:
最优结果只有一个,A=[13,20,8],故输出 1
示例2:
输入:
11 12 20
10 13 7
输出:
说明:有两个A数组的排列可以达到最优结果[12,20,11]和[11,20,12],故输出 2。

def main():
    a = list(map(int, input().split()))#定义数组
    b = list(map(int, input().split()))

    a.sort()

    max_bigger_count = 0
    ans = 0

    def dfs(level, used, bigger_count):
        nonlocal max_bigger_count, ans

        if level >= len(a):
            if bigger_count > max_bigger_count:
                max_bigger_count = bigger_count
                ans = 1
            elif bigger_count == max_bigger_count:
                ans += 1

            return

        for i in range(len(a)):
            if used[i]:
                continue

            if i > 0 and a[i] == a[i - 1] and not used[i - 1]:
                continue

            used[i] = True

            dfs(level + 1, used, bigger_count + (a[i] > b[level]))
            used[i] = False

    dfs(0, [False] * len(a), 0)

    print(ans)


if __name__ == "__main__":
    main()

  • 17
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值