比赛链接: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");}}
}