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 @   黑屿白  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示