本文主要是介绍第十五届蓝桥杯省赛第二场PythonB组B题【逆序对期望】题解(AC),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
解题思路
枚举所有的可能的交换情况,时间复杂度 O ( n 4 ) O(n^4) O(n4)。
用归并排序计算数组的逆序对,时间复杂度 O ( n ) O(n) O(n)。
综上时间复杂度 O ( n 5 ) O(n^5) O(n5)。
由于 Python
运行效率较低,约 500 500 500 秒可得到结果。
N = 55n = 51
a = [0] * N
tmp = [0] * Ndef merge_sort(q, l, r):if l >= r:return 0mid = (l + r) // 2res = merge_sort(q, l, mid) + merge_sort(q, mid + 1, r)i = lj = mid + 1k = 0while i <= mid and j <= r:if q[i] <= q[j]:tmp[k] = q[i]k += 1i += 1else:tmp[k] = q[j]res += mid - i + 1k += 1j += 1while i <= mid:tmp[k] = q[i]k += 1i += 1while j <= r:tmp[k] = q[j]k += 1j += 1for i in range(l, l + k):q[i] = tmp[i - l]return rescnt = 0
res = 0
for i in range(1, n + 1):for j in range(1, n + 1):if i != j:for u in range(1, n + 1):for v in range(1, n + 1):if u != v:cnt += 1a = list(range(0, n + 1))a[i], a[j] = a[j], a[i]a[u], a[v] = a[v], a[u]res += merge_sort(a, 1, n)print("%.2lf" % (res / cnt))
运行结果:
65.33
【在线测评】
这篇关于第十五届蓝桥杯省赛第二场PythonB组B题【逆序对期望】题解(AC)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!