67143


# 問題内容

<https://atcoder.jp/contests/abc066/tasks/arc077_a>

> 長さnの数列 a1,...,an が与えられます。 空の数列 b に対して、以下の操作を n回行うことを考えます。
>
> i回目には
>
>   1. 数列のi番目の要素aiをbの末尾に追加する。
>   2. bを逆向きに並び替える。
>

>
> この操作をしてできる数列bを求めて下さい。

# 回答方針

以下の流れで回答を試みました。

  1. 入力される数列を偶数番の数列と奇数番の数列に分ける
  2. 偶数番数列の逆順と奇数番数列を足し合わせる
  3. 入力された数列の長さに応じて回答する数列を反転させる

## ソースコード

[code]

    n = int(input())
    a = list(map(int, input().split()))
    
    a_even = list(filter(lambda x: x % 2 == 0, a))
    a_odd = list(filter(lambda x: x % 2 != 0, a))
    
    ans = a_even[::-1] + a_odd
    if n % 2 != 0:
      ans = ans[::-1]
    
    print(' '.join(map(str, ans)))
    
[/code]

# 疑問点

この回答はテストケースでは期待される動作をしますが、  
実際ジャッジにかけてみると一部WAが出てしまいます。

WAが出てしまう原因は何でしょうか？


CC BY-SA 4.0
2020-05-30T07:23:43.367
67140
2020-05-30T08:52:54.427
9616
question
python
AtCoder Beginner Contest 066 C問題でWA発生


この部分が正しく実装されていないせいでしょう。

  * 入力される数列を偶数番の数列と奇数番の数列に分ける
[code]     a_even = list(filter(lambda x: x % 2 == 0, a))

    a_odd = list(filter(lambda x: x % 2 != 0, a))
    
[/code]

このコードだと「値が偶数の数列と値が奇数の数列に分ける」ことになり、偶数番目と奇数番目(先頭は1番目と扱うので奇数番目)とを分けたことにはなりません。

(出題の入力例は意図的なのかどうか、それでも動いているように見える結果が出るような例だけになっています。)

例えば、こんな入力例で実行してみると良いでしょう。

[code]

    4
    0 1 2 3
    
[/code]

あなたのコードの出力:

[code]

    2 0 1 3
    
[/code]

正しい結果:

[code]

    3 1 0 2
    
[/code]

* * *

上記の2行を例えば、次のように書き換えると正しい結果が出ると思います。

[code]

    a_even = a[1::2]
    a_odd = a[::2]
    
[/code]


CC BY-SA 4.0
2020-05-30T08:52:54.427
67143
2020-05-30T08:52:54.427
13972
67140
answer