题解
假设 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; }
标签:...,int,ak,Klever,a1,Permutation From: https://www.cnblogs.com/purple123/p/18012645