菜逼第一次做到第五题,希望大佬勿喷。一个长度为n的数组,如果n>=k,最多可以构造a个长度为n-a+1的区间。因此如果要求构造k个极大不同区间,我们可以是其恰好为k个长度为n-k+1的区间,并且从第一个元素开始,循环长度为n-k+1的(1,n-k+1)的序列即可;如果n<k,显然无法构造。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,k;
    cin>>n>>k;
    if(k>n)cout<<"NO";
    else{
        cout<<"YES"<<endl;
        int t=n-k+1,j=1;
        for(int i=1;i<=n;i++){
            cout<<j<<" ";
            j++;
            if(j>n-k+1)j=1;
        }
    }
    return 0;
}