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<string>
#include<algorithm>
using namespace std;

int n;
int a[100000+10];
queue<int>Q;
int pos[100000+10];

int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    for(int i=0;i<n;i++) pos[a[i]]=i;
    for(int i=0;i<n;i++)
    {
        if(a[i]==0) continue;
        if(a[i]!=i) Q.push(a[i]);
    }

    int ans=0;
    while(1)
    {
        if(a[0]==0)
        {
            while(!Q.empty())
            {
                int head=Q.front(); Q.pop();
                if(a[head]==head) continue;
                else
                {
                    ans++;
                    int pos1=pos[0];
                    int pos2=pos[head];
                    swap(a[pos1],a[pos2]);
                    swap(pos[head],pos[0]);
                    break;
                }
            }
            if(Q.empty()) break;
        }
        else
        {
            ans++;
            int pos1=pos[0];
            int pos2=pos[pos[0]];
            int num1=0;
            int num2=pos[0];
            swap(a[pos1],a[pos2]);
            swap(pos[num1],pos[num2]);
        }
    }
    printf("%d\n",ans);
    return 0;
}
时间: 2024-09-29 01:54:46

PAT (Advanced Level) 1067. Sort with Swap(0,*) (25)的相关文章

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

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,*) (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 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

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

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

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 Level) 1055. The World&#39;s Richest (25)

排序.随便加点优化就能过. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> #include<cstdio> #include<map> #include<queue> #include<string> #include<stack> #include<vector> using names