ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

肖恩排序。

2026/9/21 10:00:57 拓冰建站 浏览量
肖恩排序。

问题描述
肖恩提出了一种新的排序方法
该排序方法需要一个标准数组B和一个待排序数组A。在确保对于所有位置i都有Ai>B的前提下,肖恩可以白由选择A数组的排序结果。请计算按照这种排序方法,待排序数组A可能的结果有多少种。
对于任意一个位置,如果两次排序后A不是同一个数字,那么这两种排序方式就被称为是不同的。结果可能很大,你需要将结果对109+7取余
输入描述
第一行输入一个数字n,为两个数组的长度
第二行输入n个数字,表示待排序数组A中的所有元素
第三行输入n个数字,表示标准数组B中的所有元素数据保证1<n<105,1<A < 109,1 B<109

输出描述
输出一个数字,表示所有的排列数对109+7取余后的结果。

输入

5

2 3 5 6 8

1 2 3 4 5

输出

4

import os
import sys
import math
# 请在此输入您的代码
n=int(input())
a=list(map(int,input().split()))
b=list(map(int,input().split()))#从高到低排列
a.sort(reverse=True)  #8 6 5 3 2
b.sort(reverse=True)  #5 4 3 2 1cnt=0
ans=1
j=0for i in range(n):while j<n and a[j]>b[i]: #当b为5时,遍历a中大于5的数j+=1cnt+=1  #记录大于5的个数ans*=cnt #累乘得到组合数cnt-=1  #每次迭代都会处理下一个 a[j] 的元素。通过 cnt -= 1,我们将计数器 cnt 减去 1,表示已经处理了一个满足条件的元素,因此在下一次迭代中,我们只需要考虑剩余的满足条件的元素ans%=int(1e9+7)
print(ans)