torus711 のアレ

主に競技プログラミングの問題について書きます.PC 以外だと数式が表示されないかもしれないです

AtCoder, エイシングプログラミングコンテスト 2020, B : An Odd Problem

問題概要

 $N$ 項からなる数列 ${ a_n }$ が与えられる.この数列の値の内,奇数番目にある奇数の数を求めよ.

制約

  • $1 \leq N, a_i \leq 100$

解法

 (言語ごとに変わる)何らかの方法で着数番目の要素だけをイテレートして,奇数の数を数えることで解くことができます.
 以下の Haskell の例では,cycle [ True, False ] と zip してから filter snd をすることで奇数番目を取り出し,map fst してから filter odd することで奇数を抜き出しています.
 この開放の場合,$a$ を定数回走査しているので $\Theta( N )$ 時間です.

コード

main = getLine >> readInts >>= print . length . filter odd . map fst . filter snd . flip zip ( cycle [ True, False ] )