这是一道计蒜客上的题,今天比赛队友已经把这到题做出来了,结果后台数据是错的!!!本来题目是1-n后台是0-n-1。
题目大意就是将1-N个数乱序,然后求交换多少次可以使得顺序为正。
#include <set>
#include <cstdio>
#include <cstring>
#include <vector>
#include <stack>
#include <string>
#include <deque>
#include <queue>
#include <iostream>
#include <sstream>
#include <algorithm>
#define FRER() freopen("input.txt","r",stdin)
#define FREW() freopen("output.txt","w",stdin)
typedef long long ll;
const int inf = 0x3f3f3f3f, maxn=2*100000+10;
using namespace std;
int v[maxn];
int idx[maxn];
int main()
{
// FRER();
int n;
int ans;
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
{
scanf("%d", &v[i]);
idx[v[i]]=i;
}
int ans=0;
for(int i=1;i<=n;i++)
{
if(v[i]!=i)
{
int t=idx[i];
idx[v[i]]=t;
idx[v[t]]=i;
swap(v[i], v[t]);
ans++;
}
}
printf("%d\n", ans);
}
return 0;
}