讲解都在代码里了
#include <bits/stdc++.h>
//可以发现不管n怎么取,3n和7n+1都是一个奇数一个偶数
//那么那么我们用最多n-1次交换将数组复原看一看用了奇数次还是偶数次就可以看出来了
//这种交换方式常见于基础课内容,是两个数组互为双向
using namespace std;
const int N=1e6+10;
int a[N];//存放序列;
int b[N];//存放数字的位置
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
b[a[i]]=i;
}
//现在已经存放完毕,接下来复原
int sum=0;//来记录一共要交换几次;
for(int i=1;i<=n-1;i++)
{
if(a[i]==i)continue;
//如果说这个位置没有放好的话,交换一次把数放过来
int s1=b[i];//先找到应该在这里的那个数的当前位置
int s2=i;//这是这个数应该在的位置
int n1=i;//这是这个数
int n2=a[i];//这是应该被弄走的数
a[s2]=n1;
a[s1]=n2;
b[n1]=s2;
b[n2]=s1;
sum++;
}
if(n%2==1)
{
if(sum%2==1)cout<<1;
else cout<<2;
}
else
{
if(sum%2==0)cout<<1;
else cout<<2;
}
return 0;
}
标签:int,题解,交换,存放,5466,AcWing
From: https://www.cnblogs.com/BadBadBad/p/18005326/AcWing-5466