比赛链接:Round 923 (Div. 3)
EE题传送门:E. Klever Permutation
题目:E. Klever Permutation
样例 #1
样例输入 #1
5
2 2
3 2
10 4
13 4
7 4
样例输出 #1
2 1
1 3 2
1 8 4 10 2 7 5 9 3 6
4 10 1 13 5 9 2 12 6 8 3 11 7
1 6 3 7 2 5 4
分析:
用k来构造k个公差为k的等差数组。
为了使 max(s) - min(s) <= 1 ,我们可以令第奇数个数组升序,第偶数个数组降序。r
l 是第奇数个数组元素对应的值,r是第奇数个数组元素对应的值。
如当 n = 10,k = 4
4个公差为4的等差数组分别为(竖着看)
1 5 9
2 6 10
3 7
4 8
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int tt = sc.nextInt();
while(tt-->0) {
int n = sc.nextInt();int k = sc.nextInt();
int [] a = new int [n+10];
int l = 1;int r = n;int num = 1;
for(int i = 1;i <= k;i++) {
if(i%2==1) { // i为奇数,递增
for(int j = i;j <= n;j += k) {
a[j] = l;l++;
}
}
else { // i为偶数,递减
for(int j = i;j <= n;j += k) {
a[j] = r;r--;
}
}
}
for(int i = 1;i <= n;i++) {
System.out.print(a[i]+" ");
}
System.out.printf("\n");
}
}
}