题解:CF361B Levko and Permutation

前置芝士——最大公约数 - OI Wiki

题目其实很简单,我们可以知道一些最大公约数的性质:

有一个数 xx,则:

gcd(x,x1)=1gcd(1,x)=1\gcd(x,x-1)=1 \\ \gcd(1,x)=1

那么其实只要将前 kk 个数都往后移一位,第 kk 位用 11 即可,后面的全是原数。

注意特判 k=nk=nn=1,k0n=1,k\ne0 的情况,k=nk=n 是因为第一个需要是 11n=1,k0n=1,k\ne0 是因为只有一个的时候一定是 00 个。

CFAC 记录:

AC code:

#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
const int maxn=1e6+5;
int n,k;
signed main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n>>k;
	if(k==n||n==1&&k!=0){
		cout<<"-1"<<endl;
		return 0;
	}
	for(int i=1;i<n-k;i++){
		cout<<i+1<<' ';
	}
	cout<<1<<' ';
	for(int i=n-k+1;i<=n;i++){
		cout<<i<<' ';
	}
	return 0;
}
posted @ 2024-09-10 19:50  KK_SpongeBob  阅读(11)  评论(0)    收藏  举报  来源