题目传送门:超链接在此
这道题考你的构造能力,还有数学能力,因为你要总结出一个公式,具体解析看代码注释。
总结出了公式代码就是这么简单,难怪有些高手出题速度那么快。
AC code:
/*
构造方法:以最平均的方法(使得1-n平均分为sqrt(n)个模块,使得模块数和模块大小两者最大值最小),
以这种构造方法构造出来的数列的答案取决于模块数(递增子序列的最大长度)和每个模块的大小
(递减子序列的最大长度)之和
*/
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n;
m=sqrt(n);
for(int i=0;i<n;i++){
cout<<max(n-m*(i/m+1),0)+i%m+1<<" ";
}
return 0;
}