分析

先考虑单增,最好的方式就是不断地构造出长为 \(k\) 的单增序列,为保证后面序列不会成为前面单增序列的延续,每一个序列值域上需要完全高于下一个,即本段最小值大于下段最大值,同时显然如果超过 \(k\) 个序列单减则会超出要求,因此 \(k \times k>n\) 时则输出 \(-1\) 即可。

代码

#include<bits/stdc++.h>
using namespace std;
inline void read(int &res){
	res=0;
	int f=1;
	char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9')res=(res<<1)+(res<<3)+c-48,c=getchar();
}
int n,k;
signed main()
{
	read(n);read(k);
	if(1ll*k*k<n){
		puts("-1");
		return 0;
	}
	int las=n,pos=1;
	while(las>=k){//还剩多少个数没放
		for(int i=k;i>=1;i--){
			cout<<las-i+1<<" ";
		}
		pos+=k;
		las-=k;
	}
	for(int i=1;i<=las;i++){
		cout<<i<<" ";
	}
	return 0;
}
posted on 2021-11-19 11:33  漠寒·  阅读(28)  评论(0编辑  收藏  举报