题解 CF233A 【Perfect Permutation】

概述

题号 难度 \(AC\)时间及记录
\(\texttt{CF233A}\) \(\texttt{CF难度:800}\) \(\texttt{On 2020/12/18}\)

解析


题目大意是:
有一种排列是完美的。用\(p_i\)表示排列中的第\(i\)个元素,则完美的排列符合如下性质:

  1. \(p_{p_i}=i\)
  2. \(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;
}
posted @ 2020-12-18 22:03  Bushuai_Tang  阅读(72)  评论(0编辑  收藏  举报