题解 CF233A 【Perfect Permutation】
概述
题号 | 难度 | \(AC\)时间及记录 |
---|---|---|
\(\texttt{CF233A}\) | \(\texttt{CF难度:800}\) | \(\texttt{On 2020/12/18}\) |
解析
题目大意是:
有一种排列是完美的。用\(p_i\)表示排列中的第\(i\)个元素,则完美的排列符合如下性质:
- \(p_{p_i}=i\)
- \(p_i≠i\)
求这个排列
我不会向其他人一样严谨地证明
我来讲一讲我是怎么做的吧
首先我想到的是\(p_i=i\),但是题目把它限制了
那么我想到的就是几个数组成一个轮回
那干脆就两个数吧,好像也只能是两个数呢
然后互相指向即可,那不就可以是\(1~n\)的倒序么?
代码
马蜂鬼畜,不要介意
#include<bits/stdc++.h>
#define BetterIO ios::sync_with_stdio(false)
#define Fr(i,A,B,X) for(i=A;i<=B;i+=X)
#define Reg register
#define Ll long long
#define Iln inline
#define Str string
#define Chr char
#define Vod void
#define In int
using namespace std;
In main(Vod)
{
BetterIO;
Reg In N;
cin>>N;
if(N%2==1)
{
cout<<-1<<endl;
return 0;
}
Reg In i;
for(i=N;i>=1;i--)
{
cout<<i<<' ';
}
cout<<endl;
return 0;
}
不要妄图追上西坠的太阳,而是要在黎明前就等着它!