Codeforces Round 923 (Div. 3) E. Klever Permutation (Java)

比赛链接:Round 923 (Div. 3)

EE题传送门:E. Klever Permutation

题目:E. Klever Permutation

Codeforces Round 923 (Div. 3) E. Klever Permutation (Java)_第1张图片

样例 #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

Codeforces Round 923 (Div. 3) E. Klever Permutation (Java)_第2张图片

分析:

用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
Codeforces Round 923 (Div. 3) E. Klever Permutation (Java)_第3张图片

代码:

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");
        }
    }
}

你可能感兴趣的:(算法题,算法,eclipse,idea,开发语言,java)