这道题主要考察冒泡排序求逆序对,求出逆序对后再进行正常排序处理输出就可以了。
还是挺简单的,以下为代码~(最开始没看数据范围导致写了归并……压根就没快。。。不过还是放在下面叭)
def cal(dna):
ans = 0
for i in range(n):
for j in range(i+1, n):
if dna[i] > dna[j]:
ans += 1
return ans
n, m = map(int, input().split())
DNA = [input() for _ in range(m)]
check = [[cal(DNA[i]), i] for i in range(m)]
check.sort()
for tmp in check:
print(DNA[tmp[1]])
关于使用归并这件事……(以后真得好好看看数据范围了!)
import copy
def merge(nums, left, mid, right):
l_nums = nums[left:mid+1]
r_nums = nums[mid+1:right+1]
i, j = 0, 0
count = 0
for k in range(left, right+1):
if i < len(l_nums) and (j >= len(r_nums) or l_nums[i] <= r_nums[j]):
nums[k] = l_nums[i]
i += 1
else:
nums[k] = r_nums[j]
j += 1
count += len(l_nums)-i
return count
def merge_sort(nums, left, right):
if left < right:
mid = (left+right)//2
count = merge_sort(nums, left, mid)
count += merge_sort(nums, mid+1, right)
count += merge(nums, left, mid, right)
return count
return 0
n, m = map(int, input().split())
dna = [list(input()) for _ in range(m)]
DNA = copy.deepcopy(dna)
lst = [[merge_sort(dna[i], 0, n-1), i] for i in range(m)]
lst.sort()
for tmp in lst:
print(''.join(DNA[tmp[1]]))