zoukankan      html  css  js  c++  java
  • 1067. Sort with Swap(0,*) (25)【贪心】——PAT (Advanced Level) Practise

    题目信息

    1067. Sort with Swap(0,*) (25)

    时间限制150 ms
    内存限制65536 kB
    代码长度限制16000 B

    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.

    Input Specification:

    Each input file contains one test case, which gives a positive N (<=10^5) followed by a permutation sequence of {0, 1, …, N-1}. All the numbers in a line are separated by a space.

    Output Specification:

    For each case, simply print in a line the minimum number of swaps need to sort the given permutation.

    Sample Input:
    10 3 5 7 2 6 4 9 0 8 1
    Sample Output:
    9

    解题思路

    首位为0,找出第一个未排序的数的位置进行交换
    首位非0。与该数应处的位置交换

    AC代码

    #include <cstdio>
    #include <vector>
    #include <algorithm>
    using namespace std;
    vector<int> a, b;
    int main()
    {
        int n, t, c = 0;
        scanf("%d", &n);
        for (int i = 0; i < n; ++i){
            scanf("%d", &t);
            a.push_back(t);
        }
        int cnt = 0;
        while (c < n){ //序列排序未结束
            if (0 == a[0]){ //首位为0,找出第一个未排序的数的位置
                for (; c < n && c == a[c]; ++c)
                    continue;
                if (c >= n) break;
                swap(a[0], a[c]);
                ++cnt;
            }else{ //首位非0。与应处于的位置交换
                swap(a[0], a[a[0]]);
                ++cnt;
            }
        }
        printf("%d
    ", cnt);
        return 0;
    }

    个人游戏推广:
    《10云方》与方块来次消除大战!

  • 相关阅读:
    C# 如何得到局域网中的计算机名?
    设计模式之Factory(转帖)[学习用]
    byte类型特殊的地方
    原码、反码和补码
    由Public key生成Public key token
    .Net位运算符&,|,!,^,<<,>>
    强命名程序集,签名,延迟签名
    把16进制字符转换成byte数组
    SHA1哈希算法
    .NET工具篇(四)—SN.EXE
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7074055.html
Copyright © 2011-2022 走看看