题解:CF2048B Kevin and Permutation
Wide_Master
·
·
题解
题意
构造一个由 $1\sim n$ 组成的全排列。使得所有长度为 $k$ 的子串的最小值之和最小化。
## 分析
由于是要最小值最小化,那么我们就要让一个较小的值影响到较多的区间。我们发现,如果一个小的数字放在 $k$ 的倍数的位置上,那么一个较小的数就能影响到较多的区间。其他数字可以随便填,因为不影响答案。注意多测清空。
所以我们可以将 $1$ 放在第 $k$ 个位置上,$2$ 放在第 $2k$ 个位置上。也就是说,$x$ 放在第 $xk$ 个位置。
## 代码
```cpp
//By xiaozhou001
#include<bits/stdc++.h>
using namespace std;
int t,n,k;
int main()
{
cin>>t;
while(t--){
cin>>n>>k;
for(int i=1;i<=n;i++){
if(i%k==0){
cout<<i/k<<endl;
}else{
cout<<i+n/k-i/k<<endl;
}
}
}
return 0;
}
``````