はまやんはまやんはまやん

hamayanhamayan's blog

pushpush [AtCoder Beginner Contest 066 / AtCoder Regular Contest 077 C]

http://abc066.contest.atcoder.jp/tasks/arc077_a

解法

http://abc066.contest.atcoder.jp/submissions/1397311

dequeを使ってシミュレートする。
1. 後ろに入れる
2. 上下逆転させる
を繰り返す操作は、「後ろに入れる->前に入れる->後ろに入れる->前に入れる->…」に相当する。
dequeで後ろ、前、後ろ、前でやっていけばいい。
取り出す時は、Nが偶数なら上下は普通に戻っているので、先頭から取り出す。 
そうでないなら、上下逆転している状態で終わっているので、後ろから取り出す。

int N, A[201010];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;
    rep(i, 0, N) cin >> A[i];
 
    deque<int> deq;
    rep(i, 0, N) {
        if (i % 2 == 0) deq.push_back(A[i]);
        else deq.push_front(A[i]);
    }
 
    rep(i, 0, N) {
        if (0 < i) printf(" ");
        
        int x;
        if (N % 2 == 0) x = deq.front(), deq.pop_front();
        else x = deq.back(), deq.pop_back();
        printf("%d", x);
    }
    printf("\n");
}