E. Klever Permutation

题解

假设 a1 a2 a3 ... ak  ak+1 ak+2 ... an是符合要求的数组,

那么我们可以推断出:

a(k+1)=a(1)+1;

a(k+2)=a(2)-1;

...

a(2k+1)=a(k+1)+1;

...

因此我们知晓奇数位的数要比较小,偶数的位置要比较大;又题目说明一定有解,所以我们假定a1=1,a2=n再递推出其余各项。

Code

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int a[N];
int main(){
    ios::sync_with_stdio(false);
    int t;
    cin>>t;
    while (t--){
        int n,k,cnt=-1;
        cin>>n>>k;
        int sum1=n,sum2=1;
        for (int i=1;i<=k;i++){
            for (int j=i;j<=n;j+=k)
                if (i%2==1)    a[j]=sum1--;
                else a[j]=sum2++;
        }
        for (int i=1;i<=n;i++) 
            if (i==1) cout<<a[i];
            else cout<<" "<<a[i];
        cout<<endl;
    }
    return 0;
}

 

posted @ 2024-02-09 22:06  黑屿白  阅读(27)  评论(0)    收藏  举报