题解:CF2048B Kevin and Permutation

· · 题解

题目连接

CF2048B Kevin and Permutation

题意简述

构造一个长度为 n 的排列,使所有长度为 k 的子区间的最小值之和最小。

解题思路

在k的倍数的位置上放最小的数。

参考代码

#include<bits/stdc++.h>
using namespace std;
int n,a,k,ans[100001];
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a>>k;
        memset(ans,0,sizeof(ans));
        for(int j=k;j<=a;j+=k)ans[j]=j/k;
        int tmp=a/k+1;
        for(int j=1;j<=a;j++){
            if(j%k==0)continue;
            ans[j]=tmp;
            tmp++;
        }
        for(int j=1;j<=a;j++)cout<<ans[j]<<" ";
        cout<<endl;
    }
    return 0;
}