题解:CF2048B Kevin and Permutation
lailai0916 · · 题解
题意简述
构造一个长度为
解题思路
考虑每个长度为
- 从最小的数
1 开始,将1 放置在位置k ,这样前k 个区间的最小值为1 。 - 接着考虑数
2 ,将2 放置在位置2k ,这样接下来的k 个区间的最小值为2 。 - 依此类推,将数
x 放置在位置xk ,使得每个位置上的数尽可能影响到最少的区间,从而最小化区间的最小值之和。
对于剩下的数,可以随意放置,因为它们的放置不会影响已经确定的最小值。
参考代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin>>T;
while(T--)
{
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cout<<(i%k?i+n/k-i/k:i/k)<<' ';
}
cout<<'\n';
}
return 0;
}