PAT 1067 Sort with Swap(0,*)

#include <cstdio>
#include <cstdlib>
#include <vector>

using namespace std;

int swap(vector<int> &numpos, int va, int vb) {
    //printf("swap(%d at %d, %d at %d)\n", va, numpos[va], vb, numpos[vb]);
    int pa = numpos[va];
    int pb = numpos[vb];
    numpos[va] = pb;
    numpos[vb] = pa;
}

int pick_first_mismatch_value(vector<int> &numpos, int start) {
    int i = start;
    int len = numpos.size();
    while (i < len) {
        if (numpos[i] != i) {
            return i;

        }
        i++;
    }
    return -1;
}

int main() {
    int N;
    scanf("%d", &N);

    vector<int> numpos(N);

    int value;
    for (int i=0; i<N; i++) {
        scanf("%d", &value);
        numpos[value] = i;
    }

    int step = 0;
    int b = 0;
    for (;;) {
        if (numpos[0] == 0) {
            b = pick_first_mismatch_value(numpos, b);
            if (b <= 0) {
                break;
            }
            swap(numpos, 0, b);
            step++;
            continue;
        }
        swap(numpos, 0, numpos[0]);

        step++;
    }

    printf("%d", step);

    return 0;
}
时间: 2024-11-10 14:34:58

PAT 1067 Sort with Swap(0,*)的相关文章

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

1067. Sort with Swap(0,*) (25) 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 appl

PAT 1067 Sort with Swap(0, i)

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 fol

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 exa

PAT 甲级 1067 Sort with Swap(0, i) (25 分)(贪心,思维题)*

1067 Sort with Swap(0, i) (25 分) 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 ap

1067 Sort with Swap(0, i) (25 分)

1067 Sort with Swap(0, i) (25 分) 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 ap

PAT Advanced 1067 Sort with Swap(0,*) (25) [贪?算法]

题目 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 f

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

时间限制 150 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue 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

PAT (Advanced Level) 1067. Sort with Swap(0,*) (25)

只对没有归位的数进行交换. 分两种情况: 如果0在最前面,那么随便拿一个没有归位的数和0交换位置. 如果0不在最前面,那么必然可以归位一个数字,将那个数字归位. 这样模拟一下即可. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<map> #include<stack> #include<queue> #include

PAT (Advanced Level) 1067 Sort with Swap(0, i)

题解   贪心.   若 0 的不在它的位置,那么 0 占的那个元素的位置,就和那个元素交换.   若 0 在它的位置,找一个没有归位的元素与 0 交换. 代码 #include<bits/stdc++.h> using namespace std; int arr[100005]; int main() { int i,n,x,cnt=0; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&am