首页 > 试题广场 >

Sort with Swap(0,*) (25)

[编程题]Sort with Swap(0,*) (25)
  • 热度指数:2825 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
Given any permutation of the numbers {0, 1, 2,..., N-1}, it is easy to sort them in increasing order. But what if Swap(0, *) is the ONLY operation that is allowed to use? For example, to sort {4, 0, 2, 1, 3} we may apply the swap operations in the following way:

Swap(0, 1) => {4, 1, 2, 0, 3}

Swap(0, 3) => {4, 1, 2, 3, 0}

Swap(0, 4) => {0, 1, 2, 3, 4}

Now you are asked to find the minimum number of swaps need to sort the given permutation of the first N nonnegative integers.

输入描述:
Each input file contains one test case, which gives a positive N (<=105) followed by a permutation sequence of {0, 1, ..., N-1}.  All the numbers in a line are separated by a space.


输出描述:
For each case, simply print in a line the minimum number of swaps need to sort the given permutation.
示例1

输入

10 3 5 7 2 6 4 9 0 8 1

输出

9
a = list(map(int,input().split()))
i,k,f = 1,0,0
while i <= a[0]:
    if a[i] == i - 1:
        f = 0 if a[1] else 1
        i += 1
    else:
        k += 3 if f else 1
        a[a[i] + 1],a[i] = a[i],a[a[i] + 1]
        f = 0          
print(k)

编辑于 2020-02-10 11:45:14 回复(0)