import java.util.*; /* Kolakoski序列是个随机生成的无限序列. 例如,当给定的整数组为[1,2]时,Kolakoski序列是这样的: [1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1,2,1,1,2,1,2,2,1,1,...] 如果我们将相邻的相同的数字分成一组,那么将会得到: [[1],[2,2],[1,1],[2],[1],[2,2],[1],[2,2],[1,1],[2],[1,1],[2,2],[1],[2],[1,1],[2],[1],[2,2],[1,1],...] 可以看出,每组数字交替由1,2组成. 接下来对每个分组求它的长度,得到: [1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1,2,1,1,2,1,2,2,1,1,...] 可以看出,经过上述变换后,数列保持不变. 对于其他给定的整数组,同样可以用类似的方法构造Kolakoski序列,例如给定整数组[2,3]时: [2,2,3,3,2,2,2,3,3,3,2,2,3,3,2,2,3,3,3,2,2,2,3,3,3,2,2,3,3,...] 给定整数组[2,1,3,1]时,构造得到如下: [2,2,1,1,3,1,2,2,2,1,3,3,1,1,2,2,1,3,3,3,1,1,1,2,1,3,3,1,1,...] 输入 输入由两行组成, 第一行包括两个正整数n,m 第二行包括m个正整数a[] 数据规模与限制: 0<n<10000 1<m<1000 0<a[i]<1000 a[i]不等于a[i+1] a[0]不等于a[m-1] 输出 每行只有一个数字,共n行 整数组a生成的Kolakoski序列的前n项 Example Input 30 4 2 1 3 1 Output 2 2 1 1 3 1 2 2 2 1 3 3 1 1 2 2 1 3 3 3 1 1 1 2 1 3 3 1 1 2 */ public class Sohu_kolakoskiSequece { public static void getArr(int n, int m, int[] a) { List<Integer> lists = new ArrayList<Integer>(); int flag = 0; int k = 0; int count = 0; while(flag < n) { if(k == m) k = 0; lists.add(a[k]); flag++; for(int i = 0; i < lists.get(count) - 1; i++) { lists.add(a[k]); flag++; } k++; count++; } // System.out.println(lists.size()); for (int s = 0; s < n; s++) System.out.print(lists.get(s) + " "); } public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int m = in.nextInt(); int[] a = new int[m]; for(int i = 0; i < m; i++) { a[i] = in.nextInt(); } getArr(n,m,a); } }
时间: 2024-10-09 03:10:09