题解:CF2048B Kevin and Permutation

· · 题解

题意

构造一个由 $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; } ``````