蓝桥杯省赛-2016-C/C++-B-9

hash 归位

#include<bits/stdc++.h>
using namespace std;
#define LOCAL
#define ll long long int
#define inf 0x3f3f3f3f
#define mset(a,b) memset(a,b,sizeof(a))
const int maxn=1e4+5;
int a[maxn],b[maxn];
/*
    蓝桥杯省赛-2016-C/C++-B-9
*/
void Swap(int &aa,int &bb){
    int t=aa;
    aa=bb;
    bb=t;
}
void solve(){
    int n;
    int ans=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++) {
        scanf("%d",a+i);
        b[a[i]]=i;//使用b数组记录 a[i]应该出现在什么位置
    }
    for(int i=1;i<=n;i++){
        if(a[i]!=i){
            int q=b[i],p=a[i];
            Swap(a[b[i]],a[i]);
            b[a[i]]=i;
            b[p]=q;
            ans++;
        }
    }
    printf("%d\n",ans);
}
int main(){
#ifdef LOCAL
    freopen("in.in","r",stdin);
#endif
    solve();
    return 0;
}
Author: universal42
Link: https://universal4s.github.io/2019/03/17/lqb-2016-C-B-9/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.