Bachgold Problem [ Codeforces Round #388 (Div. 2) A ]
考察
以前記事にした以下の問題とほとんど同じ考え方で解けます。
・Dice Rolling [ Educational Codeforces Round 56 (Rated for Div. 2) A ] - 文系プログラマーのプログラミング備忘録
N が偶数のとき、2以上の偶数は必ず 2 の倍数になっているので、2 を N/2 回出力すればよいです。
N が奇数のとき、N は必ず 3+2*m という形になっています(例:3=3+2*0, 5=3+2*1, 7=3+2*2)。
このときの m は N/2-1 で求められます。
したがって、3 を 1 個出力した後に、2 を(N/2-1)個出力すればよいです。
コード
void solve (FastScanner in, PrintWriter out) { int n = in.nextInt(); ArrayList<Integer> list = new ArrayList<>(); if (n%2 == 0) { for (int i=0; i<n/2; i++) list.add(2); } else { list.add(3); for (int i=0; i<n/2-1; i++) list.add(2); } out.println(list.size()); for (int i=0; i<list.size(); i++) { out.print((i==0?"":" ")+list.get(i)); } out.println(); }